【问题标题】:How to call Javascript from @JavascriptInterface method in webView, Android?如何从 webView、Android 中的 @JavascriptInterface 方法调用 Javascript?
【发布时间】:2016-09-14 07:32:39
【问题描述】:

这是我的 HTML 页面代码:

<script>
    function native_callback() {
        alert("Test")
    }
</script>
<button onclick='native.appVersion()'>appVersion</button>

如您所见,只有一个按钮,当我单击该按钮时,它会调用@JavascriptInterface 方法appVersion()。我想做的是在appVersion()方法中调用javascript函数native_callback()。不幸的是,我会捕捉到一个 java 异常。

这是我的 WebView 类的 java 源代码的一部分:

... // some other codes that not related

getSettings().setJavaScriptEnabled(true);
addJavascriptInterface(new InJavaScriptLocalObj(), "native");

... // some other codes that not related

final class InJavaScriptLocalObj {
@JavascriptInterface
    public void appVersion() {
        Log.i("JsInterface","Called!")
        loadUrl("javascript:native_callback()");
    }
}

而且,我可以从网页中捕获异常:

Uncaught Error: Java exception was raised during method invocation -- From line 6 of http://my web page url

第 6 行是&lt;button onclick='native.appVersion()'&gt;appVersion&lt;/button&gt;

顺便说一句,cods Log.i("JsInterface","Called!") 已被调用,我可以看到日志。

我该怎么办?

解决方案 实际上,它必须在另一个线程中调用,但与您的 WebView 对象相同。 这是我的代码:

web_view.post(new Runnable() {
        @Override
        public void run() {
            web_view.loadUrl("javascript:native_callback()");
        }
    });

【问题讨论】:

    标签: javascript java android webview


    【解决方案1】:

    使用 handler 怎么样? 我检查了它在我的项目中运行良好。

    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            loadUrl("javascript:native_callback()");
        }
    }, 0);
    

    【讨论】:

    • 是的,你是对的。它必须是另一个线程,但与 webView 相同。我正在使用这些:web_view.post(new Runnable() { @Override public void run() { web_view.loadUrl("javascript:native_callback()"); } });
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2016-06-20
    • 2016-05-07
    • 1970-01-01
    • 2015-07-09
    相关资源
    最近更新 更多