javascript 動かない - iOS UIWebViewのJavascript console.log()




3 Answers

敬具を付けられた同僚と相談した後、彼はSafari Developer Toolkitと、これをiOS Simulatorのコンソール出力(およびデバッグ)用UIWebViewsにどのように関連付けることができるかを警告しました。

ステップ:

  1. Safari環境設定を開く - > "詳細設定"タブ - >チェックボックスを有効にする "メニューバーに現像メニューを表示する"
  2. iOS SimulatorでUIWebViewでアプリを起動する
  3. Safari - >開発 - > i(パッド/ポッド)シミュレータ - > [the name of your UIWebView file]

複雑な(私の場合はflot )Javascriptやその他のものをUIWebViewsにドロップして自由にデバッグすることができます。

編集:@ジョシュアJマッキノンによって指摘されるように、この戦略は、デバイス上でUIWebViewsをデバッグするときにも機能します。 あなたのデバイス設定でWeb Inspectorを有効にするだけです:Settings-> Safari-> Advanced-> Web Inspector(歓声@Jeremy Wiebe)

更新:WKWebViewもサポートされています

uiwebviewとは 非推奨

UIWebViewを使用してiPhone / iPadアプリを作成すると、コンソールは表示されません。 この優れた答えはエラーのトラップ方法を示していますが、console.log()も使用したいと思います。




Swiftソリューションは次のとおりです (コンテキストを取得するにはちょっとしたハックです)

  1. UIWebViewを作成します。

  2. 内部コンテキストを取得し、 console.log() javascript関数をオーバーライドします。

    self.webView = UIWebView()
    self.webView.delegate = self
    
    let context = self.webView.valueForKeyPath("documentView.webView.mainFrame.javaScriptContext") as! JSContext
    
    let logFunction : @convention(block) (String) -> Void =
    {
        (msg: String) in
    
        NSLog("Console: %@", msg)
    }
    context.objectForKeyedSubscript("console").setObject(unsafeBitCast(logFunction, AnyObject.self), 
                                                         forKeyedSubscript: "log")
    



NativeBridgeは、UIWebViewからObjective-Cへの通信に非常に役立ちます。 コンソールログを渡してObjective-C関数を呼び出すことができます。

https://github.com/ochameau/NativeBridge

console = new Object();
console.log = function(log) {
    NativeBridge.call("logToConsole", [log]);
};
console.debug = console.log;
console.info = console.log;
console.warn = console.log;
console.error = console.log;

window.onerror = function(error, url, line) {
    console.log('ERROR: '+error+' URL:'+url+' L:'+line);
};

このテクニックの利点は、ログメッセージの改行のようなものが保存されることです。




Related

javascript ios uiwebview