2017-10-24 6 views
0

Ich habe UIWebView, wo ich Navigator userAgent -Eigenschaft ändern muss.UIWebView Navigator BenutzerAgent-Eigenschaft mit iOS9 ändern funktioniert nicht

Für iOS-Version 10+ Code unten funktioniert perfekt:

func webViewDidFinishLoad(_ webView: UIWebView) { 
    let script = "window.navigator.__defineGetter__('userAgent', function() " + 
    "{ return '+keys +thatIs +neededTo +add'; });" 
    webView.stringByEvaluatingJavaScript(from: script) 
} 

Aber mit iOS9 dies nicht funktioniert. Hat jemand eine Idee? In Info.plist habe ich NSAllowsArbitraryLoads auf True gesetzt.

Antwort

1

Der Benutzeragent muss in den UserDefaults festgelegt werden. Sie können den folgenden Code verwenden, um es einzurichten.

func setUserAgent(as userAgentString: String) { 
    UserDefaults.standard.register(defaults: ["UserAgent": userAgentString]) 
} 

Verbrauch:

let userAgentString = "USER AGENT STRING HERE" 
setUserAgent(as: userAgentString) 

EDIT:

Ich sehe, dass Sie eine Schnur an den aktuellen Useragent angehängt werden soll. Dafür müssen Sie den Wert für den aktuellen Benutzeragenten lesen, speichern, Ihre benutzerdefinierte Zeichenfolge hinzufügen und den neuen Benutzeragenten speichern. Die Verwendung bleibt gleich.

func setUserAgent(as value: String) { 

    let webView = UIWebView(frame: CGRect(width: 0, height: 0)) 
    let defaultUserAgentString = webView.stringByEvaluatingJavaScript(from: "navigator.userAgent") 

    UserDefaults.standard.register(defaults: ["UserAgent": defaultUserAgentString + " " + value]) 
    // remove the " " space if you don't need it 
} 

EDIT 2:

Ja, ändert es es für alle Web-Ansichten über Ihre App ändern. Um dies zu vermeiden, können Sie ...

func setUserAgent(as value: String) { 

    let webView = UIWebView() 
    Constants.defaultUserAgentString = webView.stringByEvaluatingJavaScript(from: "navigator.userAgent") ?? "" 

    UserDefaults.standard.register(defaults: ["UserAgent": defaultUserAgentString + " " + value]) 
} 

func resetUserAgent() { 

    if let defaultString = Constants.defaultUserAgentString { 
     UserDefaults.standard.register(defaults: ["UserAgent": defaultString]) 
    } 
} 

Constants hier ist eine Struktur/Klasse, die verwendet wird, globale Konstanten zu speichern, können Sie es mit Ihrer eigenen Struktur/Klasse ersetzen, wenn Sie eine haben. Fügen Sie einfach die statische Variable defaultUserAgentString hinzu, um den Standardbenutzeragenten zu verfolgen. Verwenden Sie resetUserAgent(), um zurück zum Standardbenutzeragenten zu wechseln, wenn Sie fertig sind. Vielleicht fügen Sie es zu viewWillDisappear() auf der ViewController Behandlung der WebView, die den modifizierten Benutzer-Agent benötigt.

+0

Danke! Es klappt! Nur aus Neugier wissen Sie, warum mein Code mit iOS 10 funktioniert, aber nicht mit älteren Versionen. Wenn ich in UserDefaults einstelle, dann muss ich es auch entfernen? Sonst könnte es auch andere WebViews beeinflussen? – Samps

+0

Ich habe es gerade mit iOS 9.2 getestet, es scheint zu funktionieren. Ja, es wird auch andere WebViews beeinflussen. Eine Korrektur dafür finden Sie in EDIT 2. Hoffe das beantwortet deine Frage. – NSAdi

Verwandte Themen