Android使用webview调用js方法传参,参数无法传入的问题
最近做一款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
* 佛曰:
* 写字楼里写字间,写字间里程序员;
* 程序人员写程序,又拿程序换酒钱。
* 酒醒只在网上坐,酒醉还来网下眠;
* 酒醉酒醒日复日,网上网下年复年。
* 但愿老死电脑间,不愿鞠躬老板前;
* 奔驰宝马贵者趣,公交自行程序员。
* 别人笑我忒疯癫,我笑自己命太贱;
* 不见满街漂亮妹,哪个归得程序员?
*/
更多相关文章
- Android开发者网站打不开的解决方法
- android sdk manager 无法更新解决方法
- Android中bindService基本使用方法概述
- 浅析Android中ndk-build支持的参数
- Unity 编辑器环境下不能正确加载Android Assetbundle 中的 Shade
- Android常用控件的使用方法