当前位置:   article > 正文

android JSBridge回调JS端函数,未触发回调问题解决_window.webviewjavascriptbridge.callhandler 没有回调

window.webviewjavascriptbridge.callhandler 没有回调

先来看下android JAVA示例代码:

  1. wv_webview.registerHandler("ShowInputBox", new BridgeHandler() {
  2. @Override
  3. public void handler(String data, final CallBackFunction function) {
  4. HashMap<String,Object> map = JsonUtils.parseJsonToMap(data);
  5. String title = map.get("title").toString();
  6. String placeholder = map.get("placeholder").toString();
  7. final QMUIDialog.EditTextDialogBuilder builder = new QMUIDialog.EditTextDialogBuilder(thisActivity);
  8. builder.setTitle(title).setPlaceholder(placeholder)
  9. .setInputType(InputType.TYPE_CLASS_TEXT)
  10. .addAction("取消", new QMUIDialogAction.ActionListener() {
  11. @Override
  12. public void onClick(QMUIDialog dialog, int index) {
  13. function.onCallBack("来自java的输出...");
  14. dialog.dismiss();
  15. }
  16. })
  17. .addAction("确定", new QMUIDialogAction.ActionListener() {
  18. @Override
  19. public void onClick(QMUIDialog dialog, int index) {
  20. String text = builder.getEditText().getText().toString();
  21. function.onCallBack(text);
  22. //dialog.dismiss();
  23. }
  24. })
  25. .create(mCurrentDialogStyle).show();
  26. }
  27. });

 

再来看下H5端的JS代码:

  1. if (!window.WebViewJavascriptBridge) {
  2. document.addEventListener('WebViewJavascriptBridgeReady', function() {
  3. console.log('WebViewJavascriptBridgeReady...');
  4. $('div[edit=true]').click(
  5. function() {
  6. var $this = $(this);
  7. var _title = $(this).attr("title");
  8. var _placeholder = $(this).attr("placeholder");
  9. var _data = {
  10. title : _title,
  11. placeholder : _placeholder
  12. };
  13. window.WebViewJavascriptBridge.callHandler(
  14. 'ShowInputBox', _data, function(resp) {
  15. console.log("回调事件...");
  16. $this.find('span:first-child').html(resp);
  17. });
  18. });
  19. }, false);
  20. }

问题出在:JS调用Native接口ShowInputBox,可以调用成功,但是Native回传数据给JS时,总是没成功,也没有任何错误输出,导致无法修改页面数据。。。

 

这个问题纳闷了好几个钟,经过反复确认代码是没有问题的,不得以只好仔细分析JSBridge源码,最终发现数据传递到WebViewJavascriptBridge.js里头的_handleMessageFromNative()就暴走了,然后就想调教下WebViewJavascriptBridge.js,把JSBridge下载下来,然后改成手动导入库到项目里头。

修改手动导入的WebViewJavascriptBridge.js,简单增加个console.log(),直接就好了。。。推测是js文件编码原因导致的奇怪现象,经过编辑器改动后编码又好了。

 

总结:推测是编码原因或是数据转义错误,可手动下载源码后本地一步步调试。

 

 

2018-12-30更新:

发现了JSBridge的增强版:DSBridge,支持通过类的方式集中管理API,直接替换了。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/710361
推荐阅读
相关标签
  

闽ICP备14008679号