当前位置:首页 » 编程语言 » java数组js

java数组js

发布时间: 2024-12-15 16:10:07

Ⅰ 如何在WebView中通过java传递给JS数组

1.整体思路:
js调用java
首先将js代码注入到webview的页面中,然后通过修改window.location.href来向java传递参数,java端通过监听页面url的改变来识别js端传递的参数.然后再经解析数据实现java方法的调用.
java调用js
java通过webView.loadUrl("JavaScript:"+jsCode);来实现js代码的调用
2. java调用js的实现
java调用js的方法,相当简单:
String jsCode = "(function(){ /*js code here*/ })()";
webview.loadUrl("javascript:" + jsCode);

注意:要把js代码用自执行函数包裹起来
利用这种方法可以把任意代码注入到页面中
注意: 当页面刚加载时就需要把 2.1中的js代码注入到页面中,但是有时会出现页面加载完成,但是注入的代码没有执行的现象,应该是因为js没有及时加载而页面先加载完成。要解决这个问题就需要在页面加载完成时触发一个事件比如jsBridgeReady,js端通过监听jsBridgeReady事件来调用java方法。那么总体流程如下:
加载页面->注入js代码->页面加载完成->触发js注入完成事件
代码:
在BridgeWebClient中添加逻辑: 1,加载页面时注入js代码: 2,加载完成后触发加载完成事件
@Override
public void onLoadResource(WebView view, String url) {
// 注入桥接代码
// 这里通过读取js文件获得js代码
if (mFileName != null) {
view.loadUrl(mBridge.createBaseJs(mContext, mFileName));
}
super.onLoadResource(view, url);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
// 触发注入完成事件,用于解决 注入的代码没有及时加载成功导致无法调用的问题
view.loadUrl("(function(){if(window.UAPPJSBridgeReady){window.UAPPJSBridgeReady();}})()");
}

如果你也想从文件读取js代码,记得把读取的代码压缩一下,把注释和换行删除,不然很可能会报错
js端调用java注入的代码:
//判断代码是否注入完成
if(window.UAPPJSBridge){
//调用注入的方法
window.UAPPJSBridge.wxshare(message,success,error);
}else{
//监听注入完成的事件
window.onBridgeLoaded=function(){
if(window.UAPPJSBridge){
window.UAPPJSBridge.wxshare(message,success,error);
}
}
}

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:643
制作脚本网站 发布:2025-10-20 08:17:34 浏览:933
python中的init方法 发布:2025-10-20 08:17:33 浏览:630
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:818
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:728
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1064
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:296
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:157
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:847
python股票数据获取 发布:2025-10-20 07:39:44 浏览:759