最近做一款gis地图项目,需要用到Android中的webview加载本地html并且调用js方法:坑爹的问题出现了,当调用js方法需要传参数的时候死活传不进去
首先设置webview支持调用js方法:
WebSettings webSettings = mWebview.getSettings(); //mWebview是你的webview控件
webSettings.setJavaScriptEnabled(true); //设置webview支持调用js方法
//设置js可以调用android中JsCallAndroid的方法,我设置这个是为了看一下js方法的回调情况,后面有JsCallAndroid类对应的代码,和js中调用的方法
mWebview.addJavascriptInterface(new JsCallAndroid(), "jsCallAndroid"); //后面html调用android的时候要用
mWebview.loadUrl("file:///android_asset/demo.html"); //android_asset这个目录是加载的你assets目录
先说一下解决方案:
注意我推荐一定要这样写:因为如果你不在这里面写可能你在之前加载的html还没有完成,这样调用js方法是不会生效的
1、当你需要传入的字符串为"1234556789"这样全部为数字的字符串时,这样写一点问题没有:
mWebview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
String data = "123456789";
mWebview.loadUrl("javascript:setData(" + data + ")");
super.onPageFinished(view, url);
}
});
但是一般情况下不会是这样的
2、多数情况下js需要我们传入的是一个json类型的字符串,这时需要在你的变量两边加上一对单引号,否则是传不过去的,憋了我2天啊。
mWebview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
//参数一
String data = "{"code": "12","id": "4","name": "浮标3","position": {"cartographicDegrees": [117.158944444, 39.16886111, 0.0]}";
//参数二
String res = "maxwindSpeed";
//单个参数传递
mWebview.loadUrl("javascript:setData('" + data + "')"); //仔细看我给标红的单引号
//多个参数传递,现在是两个的,只需要把你需要传入的参数外面套上一个单引号,自己找精华吧
mWebview.loadUrl("javascript:setData('" + data + "','" + res +"')");
}
});
3、js调用Android
js调用android对应的内部类
private class JsCallAndroid{
@JavascriptInterface
public void jsCallbackMethod(String result) {
LogUtils.d("js接收到的字符串为:" + result); //当js中的方法被调用的时候打印接收到的字符串
}
}
对应的html中被调用的js方法
function setData(str,icon){
window.jsCallAndroid.jsCallbackMethod(str); //调用这个方法就会回调上面的方法,打印接收到的字符串
var res = JSON.parse(str);
...
...
}
/**
* _ooOoo_
* o8888888o
* 88" . "88
* (| -_- |)
* O\ = /O
* ____/`---'\____
* .' \\| |// `.
* / \\||| : |||// \
* / _||||| -:- |||||- \
* | | \\\ - /// | |
* | \_| ''\---/'' | |
* \ .-\__ `-` ___/-. /
* ___`. .' /--.--\ `. . __
* ."" '< `.___\_<|>_/___.' >'"".
* | | : `- \`.;`\ _ /`;.`/ - ` : | |
* \ \ `-. \_ __\ /__ _/ .-` / /
* ======`-.____`-.___\_____/___.-`____.-'======
* `=---='
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* 佛祖保佑 永无BUG
* 佛曰:
* 写字楼里写字间,写字间里程序员;
* 程序人员写程序,又拿程序换酒钱。
* 酒醒只在网上坐,酒醉还来网下眠;
* 酒醉酒醒日复日,网上网下年复年。
* 但愿老死电脑间,不愿鞠躬老板前;
* 奔驰宝马贵者趣,公交自行程序员。
* 别人笑我忒疯癫,我笑自己命太贱;
* 不见满街漂亮妹,哪个归得程序员?
*/