当前位置:首页 » 编程语言 » 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);
}
}
}

热点内容
允许ip访问网站 发布:2025-09-15 11:38:26 浏览:940
linux下was启动命令 发布:2025-09-15 11:23:28 浏览:66
java正则日期格式 发布:2025-09-15 11:23:27 浏览:235
sqlserversa密码忘记 发布:2025-09-15 10:36:06 浏览:828
iisftp日志 发布:2025-09-15 10:33:31 浏览:306
共享盘访问密码 发布:2025-09-15 10:32:39 浏览:72
为什么说资产配置特别重要 发布:2025-09-15 10:17:45 浏览:742
python停止脚本运行 发布:2025-09-15 10:15:32 浏览:767
怎么猜qq密码 发布:2025-09-15 10:02:42 浏览:293
新雅阁2022低配有哪些配置 发布:2025-09-15 10:02:06 浏览:793