如何在webView,Android中使用@JavascriptInterface方法调用Javascript?
问题描述:
这是我的HTML页面代码:如何在webView,Android中使用@JavascriptInterface方法调用Javascript?
<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);
是的,你是对的。它必须是另一个线程,但与webView相同的线程。而我使用这些:'web_view.post(新的Runnable(){@Override 公共 无效的run(){ web_view.loadUrl( “JavaScript的:native_callback()”);} });' – KaKa