2017-02-05 12 views
0

Мое приложение имеет UIWebViews, некоторые сайты загрузки, где мне нужна настольная версия сайта, некоторые сайты загрузки, где мне нужна мобильная версия сайта.Установить различные User-агенты для нескольких UIWebViews

Поэтому я установил пользовательский агент для пользовательского агента или мобильного пользователя-агента для достижения этого.

Например, если я хочу UIWebView, чтобы загрузить версию Desktop на сайт, я просто запустить этот код прямо перед:

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 по мере необходимости между рабочим столом и мобильным телефоном и загрузить соответственно, но иногда моему приложению требуется одновременное одновременное загрузку двух пользовательских интерфейсов UIWebView, одного мобильного телефона, одного рабочего стола.

Есть ли способ установить пользовательский агент UIWebView для указанного UIWebView?

Я предполагаю, что это будет включать swizzling методы NSUrlRequest или что-то еще? Я очень мало знаю об этом материале

ответ

1

Простым способом, если возможно, является просто использовать WKWebView вместо UIWebView. WKWebView предоставляет строку пользовательского агента как свойство самого класса (.customUserAgent, iOS9 +). В качестве дополнительного бонуса код JavaScript, работающий в представлении, будет быстрее и будет потреблять меньше энергии от батареи, поскольку JavaScript можно предварительно скомпилировать в собственный код.

При этом, если вам по какой-то причине нужно придерживаться UIWebView, вы можете создать NSURLProtocol, который перехватывает все HTTP-запросы вашего приложения и изменяет это поле в зависимости от имени хоста в URL-адресе. На веб-сайте Apple есть несколько примеров NSURLProtocol. Начните с этого и подкорректируйте по мере необходимости.

+0

Не знаю, что о WKWebView –

+0

Спасибо за редактирование. Я забыл, что они не добавили этого до iOS 9. – dgatwood

+0

Не беспокойтесь! Это помогает моему текущему проекту тонну, перейдя на WKWebView сегодня вечером! –