1.
evaluateJavacript()方法调用js
在4.4及以后的版本中,采用
webView.loadUrl(
"javascript:test()"
)调用js则会出现问题。理论上,loadUrl()方法只支持单行js的执行,但是在target=19及以后,该方法可能会不起作用。所以必须采用如下方法执行js:
- webView.evaluateJavascript("test()", new ValueCallback<String>() {
- @Override
- public void onReceiveValue(String arg0) {
- }
- });
2.
@JavacriptInterface注解
在编写html5应用时,需要在js代码中访问java中的函数,则会用到WebView的addJavascriptInterface()函数。因为安全问题,在target=17及以上时,只能访问带有@JavascriptInterface注解的函数。之前,任何public的函数都可以在js代码中访问,其中的getClass()函数也能被访问到,然后js可以通过反射来访问其他一些内容。通过引入该注解,则在js中只能访问有该注解的函数,这样可以增强安全性。
3.
注意,与JS代码绑定的的这个Java对象运行在另一个线程中,与创建它的线程不是一个线程。(这一点在android所有版本中都要注意)
final class DemoJavaScriptInterface{
public DemoJavaScriptInterface() {
}
/**
* 此处运行在非主线程,所以要post一下。
*/
public void clickOnAndroid(){
mHandler.post(new Runnable() {
@Override
public void run() {
// 此处调用 HTML 中的javaScript 函数
mWebView.loadUrl("http://www.baidu.com");
}
});
}
}
转自http://blog.csdn.net/kaka123ac/article/details/42871441