【问题标题】:How to get the Javascript messages from android webview如何从 android webview 获取 Javascript 消息
【发布时间】:2016-01-29 23:21:51
【问题描述】:

大家好,我想在 webview 中注入一些代码,看看代码是否成功。我试图覆盖 WebChromeClient 的 onConsoleMessage 方法,但它只报告代码是否是未捕获的引用

public boolean onConsoleMessage (ConsoleMessage consoleMessage){
    System.out.println(consoleMessage.message());
}

我只收到如下消息:

Uncaught ReferenceError: noob is not defined

当我执行像

这样的有效命令时
document.getElementById("mainPage").innerHTML = "Hello Dolly.";

我想以某种方式知道命令是成功还是失败。 mainPage div 的内容更改得很好,但是无论命令是否成功完成,我都没有从 onConsole 方法收到任何消息。 知道我能做什么吗? 提前致谢

【问题讨论】:

  • noob is not defined 咯咯笑。您是否尝试过通过 Chrome 连接到它?
  • onConsoleMessage 仅在您使用控制台执行某些操作时有效,例如 console.log。您可以将console.log 放在您的语句之后,以确保它没有崩溃或其他什么。
  • 一定有一些东西表明javascript已经成功了任何想法?
  • @JohnSmith 没有。当您考虑到理想情况下您的所有代码都可以正常工作的事实时,检查它是否没有工作会非常昂贵。不过,您可以将代码包装在 try-catch 块中。 try { doSomething(); } catch(err) { console.log(err); }

标签: javascript android dom android-webview webchromeclient


【解决方案1】:

那个方法是一个回调,它不会做你想做的事情。

试试这个

webView.loadUrl("javascript:alert('Hey there!')");

注入javascript。

然后为 WebView 设置自定义 WebViewClient 并覆盖 onReceivedError 以检测任何 JS 错误。

还有这个方法evaluateJavascript 可能对注入 JS 并检测它是否成功很有用。您的脚本字符串如下所示:

(function() {
    try {
        //do something
        return "ok";
    } catch(err){
        return "error";
    }
})();

所以你可以这样称呼它:

mWebView.evaluateJavascript(<above script here>, new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String s) {
        if("ok".equals(s)){

        } else {
            //error
        }
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    相关资源
    最近更新 更多