jsbridge并发调用问题和解决方法

背景:

做hybrid开发都会用到jsbridge,但是最近遇到了一个问题,同时并发发送多个请求,native端只能拦截到最后一次请求,前面的请求没法拦截。然后改成用location.href='scheme'这种方式是可以让native端都能拦截到,但是会产生内部webview后退时,请求不了native。但是看了下jsbridge的通用做法都是用iframe来发送scheme请求,但是就会出现开头说的并发发送的问题,当前解决方式是做了个队列,然后把并行调用强行转成串行调用。今天看到了新公司得实现方法,大概思路如下:

iframe并发发送多个请求的实现思路:

由于公司保密协议不能提供源代码,请谅解,说下思路。

  • 假设jsbridge提供了方法call();
  • 每次调用call时,会把当前所有的数据缓存到一个数组变量sendMessage里面。
  • 每次调用都会发送一个固定的scheme,scheme://jsbridge
  • native接受到这个消息后,会调用js的一个固定全局方法pullMessage(),该方法返回值是sendMessage数组里面的所有数据的json数组字符串
  • native拿到js方法返回的json数据字符串进行解析,然后针对每个调用进行分发处理,然后再进行回调相应的js方法

以上就巧妙的避免了多次请求即使native只拿到了最后一次请求,也不会漏掉所有的js调用native的请求。这种做法是把push改成了pull。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,359评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,270评论 25 709
  • 前言 总结 Android WebView 常用的相关知识点,令包含以下干货内容分析:Js注入漏洞、WebView...
    無名小子的杂货铺阅读 70,029评论 17 169
  • 先生游南镇,一友指岩中花树问曰:“天下无心外之物,如此花树,在深山中自开自落,于我心亦何相关?”先生曰:“你未看此...
    悠悠地四月天阅读 1,183评论 0 1
  • 总有人说要遇见最好的自己。 年轻的时候,你以为最好的自己在将来的某个地方等待着你去找寻,并且相信总有一天你们会相遇...
    握瑜阅读 4,858评论 0 6