通过
CustomChromeClient client = new CustomChromeClient("jsBridge", WebCallJsfunction.class)
为 webview 中的 window 全局对象添加了 jsBridge 属性,但是在 webview 加载的网页 js 中通过 window.jsBridge 访问到的是 undefined, 经过排查发现, 必须要延迟一段时间才能获取到:
setTimeout(() => {
window.jsBridge
}, 100)
我的猜想是 java 中定义的方法 WebCallJsFunction.class 和页面加载的 js 是同时执行的,页面刚加载的时候 java 代码还没有执行完毕, 所以才会这样, 请问我的猜测正确吗? 有什么好的解决方案吗?
1
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 来实现 |
2
chenyu8674 2018-09-04 15:12:02 +08:00
同楼上,JavascriptInterface 无延迟
|
3
serge001 OP @p2pCoder @chenyu8674 的确可以,多谢~
|