2017-02-05 4 views
0

Meine App hat UIWebViews, einige Loading-Sites, auf denen ich die Desktop-Version der Site benötige, einige Loading-Sites, auf denen ich die mobile Version der Site benötige.Verschiedene User-Agents für mehrere UIWebViews setzen

Also habe ich den User-Agent auf einen Desktop-User-Agent oder einen Mobile-User-Agent gesetzt, um dies zu erreichen.

Zum Beispiel, wenn ich eine UIWebView will eine Website Desktop-Version laden Ich will einfach diesen Code ausführen Recht vor:

NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36", @"UserAgent", nil]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary]; 

Das Problem ist, dass dies natürlich eine NSUserDefaults Variable setzt, was bedeutet, für jeden UIWebView In meiner App, die danach geladen wird, wird der Desktop-Benutzeragent verwendet. Ich kann einfach den NSUserAgent nach Bedarf zwischen Desktop und Handy umdrehen und entsprechend laden, aber manchmal benötigt meine App ZWEI UIWebViews, um gleichzeitig ein Mobilgerät, einen Desktop zu laden.

Gibt es eine Möglichkeit, den User-Agent eines UIWebView für das UIWebView spezifisch festzulegen?

Ich gehe davon aus, dass dies swizzling NSUrlRequest Methoden oder etwas beinhalten wird? Ich weiß sehr wenig über das Zeug

Antwort

1

Der einfache Weg, wenn möglich, ist nur WKWebView anstelle von UIWebView zu verwenden. WKWebView macht die Zeichenfolge des Benutzeragenten als eine Eigenschaft für die Klasse selbst verfügbar (.customUserAgent, iOS9 +). Als zusätzlichen Bonus wird JavaScript-Code, der in der Ansicht ausgeführt wird, schneller und benötigt weniger Akkuleistung, da JavaScript in nativen Code vorkompiliert werden kann.

Wenn Sie aus irgendeinem Grund bei UIWebView bleiben müssen, können Sie ein NSURLProtocol erstellen, das alle HTTP-Anfragen Ihrer Anwendung abfängt und das Feld abhängig vom Hostnamen in der URL ändert. Es gibt einige Beispiele für ein NSURL-Protokoll auf der Apple-Website. Beginnen Sie damit und optimieren Sie sie nach Bedarf.

+0

Wusste das nicht über WKWebView –

+0

Danke für die Bearbeitung. Ich habe vergessen, dass sie das nicht bis iOS 9 hinzugefügt haben. – dgatwood

+0

Keine Sorge! Dies hilft meinem aktuellen Projekt eine Tonne und wechsle heute zu WKWebView! –

Verwandte Themen