js 调用 Java 方法延迟问题?

2018-09-03 13:23:02 +08:00
 serge001

通过

CustomChromeClient client = new CustomChromeClient("jsBridge", WebCallJsfunction.class)

为 webview 中的 window 全局对象添加了 jsBridge 属性,但是在 webview 加载的网页 js 中通过 window.jsBridge 访问到的是 undefined, 经过排查发现, 必须要延迟一段时间才能获取到:

setTimeout(() => {
  window.jsBridge
}, 100)

我的猜想是 java 中定义的方法 WebCallJsFunction.class 和页面加载的 js 是同时执行的,页面刚加载的时候 java 代码还没有执行完毕, 所以才会这样, 请问我的猜测正确吗? 有什么好的解决方案吗?

4465 次点击
所在节点    Android
3 条回复
p2pCoder
2018-09-03 13:40:20 +08:00
我用 JavascriptInterface 实现过
```
接口:
public class WeiboJsInterface {
@JavascriptInterface
public void getPwd(String returnValue) {
try {
unpwDict = new JSONObject(returnValue);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
加载到当前 webview:
webView.addJavascriptInterface(new WeiboJsInterface(), "weibo");

js 调用:
function transPortUnAndPw(){
username=selectNode('//*[@id="loginName"]').value;
pwd=selectNode('//*[@id="loginPassword"]').value;
window.weibo.getPwd(JSON.stringify({"username":username,"pwd":pwd}));
}
```
具体可以参见 https://github.com/zgbgx/appWeiboInfoCrawl/tree/master/weibo
我没用过 bridge 来实现
chenyu8674
2018-09-04 15:12:02 +08:00
同楼上,JavascriptInterface 无延迟
serge001
2018-09-07 14:31:35 +08:00
@p2pCoder @chenyu8674 的确可以,多谢~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485610

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX