douban/rexxar-ios

Rexxar Container 和 Rexxar Web 之间的交互

mario-huang opened this issue · 4 comments

Rexxar Web 具体前端实现是在 DOM 中加入一个 iframe 来加载此 URL,以来完成对 Rexxar Container 的通知。这种原理和WebViewJavascriptBridge是一样的。
我在想能否让前端发送ajax,由NSURLProtocol做拦截。
尝试的过程中发现拦截到了request,但无法分辨该request由谁发起,所以不知道由哪个controller做相应动作。

  1. 在 Rexxar 中 Widget 的实现确实是通过 iframe,本质上和JavascriptBridge一样。
  2. Rexxar 还有另外一种数据服务,ContainerAPI,是通过NSURLProtocol拦截请求来实现的,用来提供一些基础的数据支持,譬如Geo信息。

谢谢解答。
能否有办法让Widget 的实现也通过NSURLProtocol拦截请求来实现呢。

在我们的实践中,request 由谁发起并不太重要。只要请求的 url 符合规则,Rexxar Container 就会做出反应。Rexxar Container 并不参与任何实际的业务。所以,它似乎并不应该关心 request 具体由哪个 controller 发出。

RXRWidget 协议中,方法 - (void)performWithController:(RXRViewController *)controller 需要将 controller 以参数传入。这是 Rexxar Container 知道需要对哪个 controller 做反应的地方。但是 Rexxar Container 也只需要知道这个 controller 是一个 RXRViewController 而已。其余 controller 的具体信息就不关心了。

借由这个问题,想要请教一下 @ianwith ,为何Rexxar中实现了两套机制,将widget和ContainerAPI区分开来?理论上,ContainerAPI的基础数据支持功能,同样可以借由widget的机制,将数据回传给js端。想要了解你们这样设计的理由是什么?谢谢!

@lincode 求教!