2014-10-06 10 views
16

Używam Xcode 6 dla aplikacji na iOS z Swift. Mam prosty ViewController z osadzonym UIWebView. Możesz znaleźć poniższy kod. Teraz chcę zmienić nagłówek HTTP User-Agent. Próbowałem użyć metody setValue z , ale to nie zadziałało (zobacz odkomentowaną linię). Czy ktoś wie, jak to zrobić?Jak ustawić nagłówek "User-Agent" w UIWebView w 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) 
    } 
} 

Odpowiedz

35

Spowoduje to zmianę agenta każdego połączenia wykonanego za pomocą "normalnego" stosu.

Swift 2:

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

Swift 3:

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

Jeden istotne zastrzeżenie tutaj: będzie modyfikować user-agent dla wszystkich żądań HTTP generowanych przez aplikację (przynajmniej te, które są za pomocą URL Loading System - NSURLConnection i przyjaciół). Obejmuje to wszystkie UIWebViews w Twojej aplikacji, a nie tylko konkretną. – noamtm

+0

cześć! gdzie dodałeś ten fragment kodu? –

+2

@FarhadMammadli 'registerDefaults' nazywa się zwykle w' didFinishLaunchingWithOptions' w 'AppDelegate' – Daniel

25

Jeśli chcesz dołączyć do istniejącego łańcucha agenta użytkownika (przydatne dla pomagając dynamicznych stron internetowych, które dostosowują się do agenta użytkownika), a następnie możesz użyć następujących.

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

nie powinieneś wymuszać - odwijać agenta użytkownika, używając 'if let' would be better. Utworzenie elementu UI w celu pobrania właściwości również nie jest najlepszym podejściem i prowadzi do problemów (na przykład podczas testowania urządzenia) – Daniel

Powiązane problemy