2017-02-05 46 views
0

我的應用程序有UIWebViews,一些加載站點,我需要站點的桌面版本,一些加載站點,我需要移動版本的站點。爲多個UIWebView設置不同的用戶代理

因此,我將用戶代理設置爲桌面用戶代理或移動用戶代理來實現此目的。

例如,如果我想要一個UIWebView加載網站的桌面版本,我會簡單地權之前運行此代碼:

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]; 

的問題是,這當然是設置一個NSUserDefaults的變量,這意味着任何一個UIWebView在我的應用程序中加載後,它將使用桌面用戶代理。我可以根據需要在桌面和移動設備之間觸發NSUserAgent並相應加載,但有時我的應用需要同時加載兩個UIWebViews,一個移動設備,一個桌面。

有沒有什麼辦法可以設置特定於所述UIWebView的UIWebView的用戶代理?

我假設這將涉及NSXrlRequest方法或什麼?我對這些東西知之甚少

回答

1

簡單的方法,如果可能的話,就是使用WKWebView代替UIWebView。 WKWebView公開用戶代理字符串作爲類本身的屬性(.customUserAgent,iOS9 +)。作爲額外的好處,視圖中運行的JavaScript代碼將更快,並且使用更少的電池電量,因爲JavaScript可以預編譯爲本機代碼。也就是說,如果你出於某種原因必須堅持使用UIWebView,你可以創建一個NSURLProtocol來攔截所有應用程序的HTTP請求,並根據URL中的主機名來更改字段。在Apple的網站上有一些NSURLProtocol的例子。從那開始,根據需要調整。

+0

不知道關於WKWebView –

+0

感謝您的編輯。我忘了他們沒有添加,直到iOS 9。 – dgatwood

+0

無後顧之憂!這有助於我當前的項目,今晚切換到WKWebView! –

相關問題