2017-10-24 7 views
0

私はUIWebViewを持っており、NavigatorのuserAgentプロパティを変更する必要があります。下記のiOSバージョンについてはUIWebView NavigatorのiOS9で変更されたuserAgentプロパティが機能しない

10+コードは完璧に動作します:

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

しかしiOS9で、これは動作しません。 誰にも分かりますか? 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 
} 

EDIT 2:

はい、それはあなたのアプリケーション全体のすべてのWebビューのためにそれを変更します変更。することができますこれを避けるために...ここに

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は、グローバル定数を格納するために使用される構造体/クラスで使用すると、1つを持っている場合、あなたはあなた自身の構造体/クラスでそれを置き換えることができます。デフォルトのユーザエージェントを追跡するために静的変数defaultUserAgentStringを追加するだけです。 resetUserAgent()を使用して、完了したらデフォルトのユーザーエージェントに戻ります。変更されたユーザーエージェントが必要なWebViewを処理するViewControllerviewWillDisappear(に追加してください)。

+0

ありがとうございます!できます!私のコードがなぜios 10で動作したのか、古いバージョンで動作していないのか、好奇心から逃れています。 UserDefaultsで設定した場合は、それも削除する必要がありますか?それ以外の場合、他のWebViewにも影響を与える可能性があります。 – Samps

+0

私はiOS 9.2でそれをテストしましたが、うまくいくようです。 はい、他のWebViewにも影響します。そのための修正についてはEDIT 2を参照してください。希望があなたの質問に答えることを望みます。 – NSAdi

関連する問題