2017-10-24 4 views
0

Navigator userAgent 속성을 변경해야하는 UIWebView가 있습니다.UIWebView Navigator iOS9로 변경되는 userAgent 속성이 작동하지 않습니다.

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

을하지만 iOS9와 함께이 작동하지 않습니다 아래의 아이폰 OS 버전 10 + 코드

완벽하게 작동합니다. 누구든지 아이디어가 있습니까? Info.plist에서 나는 NSAllowsArbitraryLoads을 true로 설정했습니다.

답변

1

사용자 에이전트를 UserDefaults에 설정해야합니다. 다음 코드를 사용하여 설정할 수 있습니다.

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

사용법 :

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

편집 : 나는 현재 해당 UserAgent 일부 문자열을 추가 할 것을 볼

. 현재 사용자 에이전트의 값을 읽고 저장하고 사용자 정의 문자열을 추가 한 다음 새 사용자 에이전트를 저장해야합니다. 사용법은 동일하게 유지됩니다.

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 
} 

편집 2 :

예, 앱에서 모든 웹 뷰에 대한 변경됩니다 변경. 하나가 있다면 여기

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

글로벌 상수를 저장하는 데 사용되는 구조체/클래스입니다 ...이 당신이 할 수있는 방지하기 위해, 당신은 당신의 자신의 구조체/클래스로 대체 할 수있다. 기본 사용자 에이전트를 추적하려면 정적 변수 defaultUserAgentString을 추가하기 만하면됩니다. 완료하면 resetUserAgent()을 사용하여 기본 사용자 에이전트로 다시 전환하십시오. 수정 된 사용자 에이전트가 필요한 WebView을 처리하는 ViewControllerviewWillDisappear(에 추가하십시오.

+0

감사! 그것은 작동합니다! 그냥 호기심에서 내 코드가 왜 ios 10에서 작동하는지 알고 있지만 이전 버전에서는 그렇지 않습니다. UserDefaults를 설정하면 제거해야합니다. 그렇지 않으면 다른 WebView에도 영향을 미칠 수 있습니까? – Samps

+0

난 그냥 IOS 9.2로 테스트, 그것은 작동하는 것. 예, 다른 WebView에도 영향을 미칩니다. 이에 대한 수정 사항은 EDIT 2를 참조하십시오. 희망이 귀하의 질문에 대한 답변. – NSAdi

관련 문제