如何在webView,Android中从@JavascriptInterface方法调用Javascript

How to call Javascript from @JavascriptInterface method in webView, Android?

本文关键字:@JavascriptInterface 方法 调用 Javascript 中从 Android webView      更新时间:2023-09-26

这是我的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行为<button onclick='native.appVersion()'>appVersion</button>

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

我该怎么办?

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

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

使用处理程序怎么样?我检查过它在我的项目中运行良好。

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        loadUrl("javascript:native_callback()");
    }
}, 0);
相关文章:
  • 没有找到相关文章