2017-02-05 5 views
0

내 앱에는 사이트의 데스크톱 버전이 필요한 일부로드 사이트와 모바일 버전의 사이트가 필요한로드 사이트가 UIWebViews 있습니다.여러 개의 UIWebViews에 대해 다른 사용자 에이전트 설정

그래서 이것을 달성하기 위해 사용자 에이전트를 데스크톱 사용자 에이전트 또는 모바일 사용자 에이전트로 설정합니다. 내가있는 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]; 

문제는 물론이 어떤있는 UIWebView에 대한 의미하는 NSUserDefaults 변수를 설정되어 있다는 것입니다 내 응용 프로그램에서이 후에로드하면 데스크탑 사용자 에이전트가 사용됩니다. 데스크톱과 모바일 사이에서 필요에 따라 NSUserAgent를 플립 플랍 할 수 있고 그에 따라로드 할 수 있지만 때로는 내 앱에서 두 개의 UIWebView가 동시에 모바일 하나의 데스크톱 만로드해야합니다.

UIWebView에 특정한 UIWebView의 사용자 에이전트를 설정할 수있는 방법이 있습니까?

저는 이것이 NSUrlRequest 메서드 또는 다른 것을 포함하고 있다고 가정합니다. 나는 그 물건에 대해 거의 안다.

답변

1

쉬운 방법은 가능한 경우 UIWebView 대신 WKWebView를 사용하는 것이다. WKWebView는 사용자 에이전트 문자열을 클래스 자체의 속성으로 표시합니다 (.customUserAgent, iOS9 +). 보너스로 자바 코드를 네이티브 코드로 미리 컴파일 할 수 있기 때문에보기에서 실행되는 JavaScript 코드가 더 빨라지고 배터리 소모가 줄어 듭니다.

그렇다면 UIWebView를 어떤 이유로 든 사용해야한다면 모든 응용 프로그램의 HTTP 요청을 차단하고 URL의 호스트 이름에 따라 필드를 변경하는 NSURLProtocol을 만들 수 있습니다. Apple 웹 사이트에는 NSURLProtocol의 몇 가지 예가 있습니다. 필요에 따라 시작하고 조정할 수 있습니다.

+0

WKWebView에 대해 알고 싶지 않다 –

+0

편집 해 주셔서 감사합니다. iOS 9까지 추가하지 않았다는 것을 잊었습니다. – dgatwood

+0

걱정할 필요가 없습니다! 오늘 밤 WKWebView로 전환하여 현재 프로젝트에 도움이됩니다. –

관련 문제