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。

你可能感兴趣的:(jsbridge并发调用问题和解决方法)