2014-10-06 14 views
16

Sto usando Xcode 6 per un'applicazione iOS con Swift. Ho un semplice ViewController con UIWebView integrato. Puoi trovare il codice qui sotto. Ora voglio cambiare l'intestazione HTTP User-Agent. Ho provato a utilizzare il metodo setValue di NSURLRequest ma non ha funzionato (vedere la riga non commentata). Qualcuno sa come farlo?Come posso impostare l'intestazione "User-Agent" di un UIWebView in Swift

import UIKit 

class WebViewController: UIViewController { 

    @IBOutlet weak var webView: UIWebView! 

    override func viewDidAppear(animated: Bool) { 
     var url = NSURL(string: "https://www.samplepage.com") 

     var request = NSMutableURLRequest(URL: url) 

     // request.setValue("Custom-Agent", forHTTPHeaderField: "User-Agent") 

     webView.loadRequest(request) 
    } 
} 

risposta

35

Ciò cambierà l'agente di qualsiasi chiamata effettuata tramite lo stack "normale".

Swift 2:

NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent": "Custom-Agent"]) 

Swift 3:

UserDefaults.standard.register(defaults: ["UserAgent": "custom value"]) 
+3

Un avvertimento importante: questo modificherà l'user-agent per tutte le richieste HTTP generate dalla vostra applicazione (almeno quelli che utilizzano il Sistema di caricamento URL - NSURLConnection e amici). Ciò include tutte le UIWebViews nella tua app, non solo una specifica. – noamtm

+0

ciao! dove hai aggiunto questo pezzo di codice? –

+2

@FarhadMammadli 'registerDefaults' viene solitamente chiamato' didFinishLaunchingWithOptions' all'interno di 'AppDelegate' – Daniel

25

Se si desidera aggiungere alla stringa user agent esistente (utile per aiutare le pagine web dinamiche che si adattano alla user agent), poi puoi usare il seguente

let userAgent = UIWebView().stringByEvaluatingJavaScriptFromString("navigator.userAgent")! + " Custom-Agent" 
NSUserDefaults.standardUserDefaults().registerDefaults(["UserAgent" : userAgent]) 
+1

non dovresti forzare a scartare lo user agent, usando 'if let' sarebbe meglio. Inoltre, la creazione di un elemento dell'interfaccia utente per il recupero di una proprietà non è l'approccio migliore e porterà a problemi (ad esempio durante il test dell'unità) – Daniel