背景在CS架构中,网页嵌入客户端,可以大大提高开发效率和用户体验。AR客户端开发语言为C#,其中的网页运行在基于Chromium的浏览器中。当客户端需要调用多个web窗口,并且各个web窗口之间存在数据交互时,这种情况下,客户端管理多个web窗口,Web与Client,Web与Web窗口如何更好的进行数据交互就成为了一个难题复杂的场景。根据项目实践和以往的开发经验,对这方面做一个总结。从C#到Web端,目前已知可实现的方案如下:方案一:C#调用Web页面时,在url中添加数据参数,Web端解析。这是一般项目中简单业务场景下最优选的方案。传参形式如下:http://10.10.10.10:80/index.html?pageId=3345688&name=62133&postType=1方案2C#调用网页然后直接调用js暴露的函数,将数据发送到Web端以参数的形式。将Web端暴露给Client端的方式:方案优缺点对比:结论:对于复杂场景的支持程度,首选第二种方案。Web端向C#传输数据,目前已知可实现的方案如下:1、C#将接口暴露给Web端,js直接调用C#接口以参数形式发送数据,C#解析请求参数分析和分发事件。Web端调用c#暴露的方法。方案二、Web端和c#自定义协议。Web端通过自定义协议向Client端发送数据,Client端拦截并解析自定义协议请求。如果定义的协议为:webclientprotocol://websendmsgtoclient,网页通过iframe发送请求,并在请求中添加数据如下:webclientprotocol://websendmsgtoclient?id=0&name=page方案三:web端请求到Web后端通过http端服务发送数据,Web后端服务通过tcp长连接向客户端发送数据。这种方式涉及到数据传输的很多方面,tcp传输数据比较复杂,所以一般不会采用这种方案。方案对比:结论:对比传输效率、开发工作量、实现复杂度三个方面,方案一具有明显优势。选择C#到Web端的第二个选项和Web端到C#的第一个选项,应用数据传输格式:只支持String格式传输,但为了数据分析方便,将json转成string;如果有A,B,C,D四个窗口之间有数据的相互传递,模型如下:备注:文中贴出的代码只是一个代码示例,项目中实际使用的暴露接口需要提供事件分发和数据格式检测功能。本文档提供的解决方案同样适用于C++开发的客户端与web数据的交互
