android Js交互进阶版

来源:互联网 发布:良品铺子樱花果冻淘宝 编辑:程序博客网 时间:2024/05/17 08:55

混合开发越来越常见,最近做了一个大批量的混合开发,发现简单的互调方法早已满足不了需求,摸爬滚打的踩坑过后,记录一下几个问题,顺便帮助尚处水深火热的同行排忧解惑。

1.数据传递
①. 如果是想传的只有一个值,那么比较简单,直接 webview.loadUrl(“javascript:login(“+user.getName+”)”);
②.想要在.jsp中使用很多安卓的数据,或者一个实体的话,可以使用 @JavascriptInterface标签和 webview.addJavascriptInterface(user, “user”); 直接让js使用一个实体
@JavascriptInterface:在一个class文件的方法上表上这个标注,表示这个方法在js中是可以直接通过对象调用的;
webview.addJavascriptInterface(user, “user”); :将安卓对象传递个js;
2.javascript:history.go(-1)无效
开始时随大流在
webview.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webview.load(url);
return true;
}
});
加入了 webview.load(url);防止打开自带浏览器加载链接,但是有时候你会发现js里面的回退方法竟然在手机上不管用了,解决是删掉load(url) 再return false ;
3.alert()在手机上不显示
调试jsp页面常用alert()辨别是否执行,但是手机端不会显示,原因是webview 不支持,需要内嵌浏览器内核,好在谷歌的浏览器内核可以直接用: webview.setWebChromeClient(new WebChromeClient());

4.支持使用localStorage
localStorage:进阶的session
webview设置支持
webSettings.setDomStorageEnabled(true);
webSettings.setAppCacheMaxSize(1024 * 1024 * 6);
String appCachePath = getApplicationContext().getCacheDir().getAbsolutePath();
webSettings.setAppCachePath(appCachePath);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);

安卓小白,多包涵;

原创粉丝点击