您的位置:首页 > 移动开发 > Android开发

【android】 在高版本中进行WebView与js交互需要注意的问题

2015-01-20 10:55 1061 查看
1.evaluateJavacript()方法调用js
在4.4及以后的版本中,采用webView.loadUrl("javascript:test()")调用js则会出现问题。理论上,loadUrl()方法只支持单行js的执行,但是在target=19及以后,该方法可能会不起作用。所以必须采用如下方法执行js:

[java] view
plaincopy





webView.evaluateJavascript("test()", new ValueCallback<String>() {

@Override

public void onReceiveValue(String arg0) {

}

});

2.@JavacriptInterface注解

[align=left]在编写html5应用时,需要在js代码中访问java中的函数,则会用到WebView的addJavascriptInterface()函数。因为安全问题,在target=17及以上时,只能访问带有@JavascriptInterface注解的函数。之前,任何public的函数都可以在js代码中访问,其中的getClass()函数也能被访问到,然后js可以通过反射来访问其他一些内容。通过引入该注解,则在js中只能访问有该注解的函数,这样可以增强安全性。[/align]

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");
}
});
}
}


[align=left]转自http://blog.csdn.net/kaka123ac/article/details/42871441[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: