我希望在原生iOS/Android webview控制器和webview当前加载内容的javascript上下文之间实现双向通信。 这是我到目前为止得到的:
- 我可以通过使用
WKScriptMessageHandler
(iOS)和AddJavascriptInterface
(Android)来实现js ->应用程序通信。 - 对于应用程序 -> js 通信,我能够在加载页面时注入脚本,但我希望能够在页面"运行"时调用 javascript。
WKWebView
和 Android 的WebView
都支持Eval
类型的功能,但浏览器引擎不允许这样做,除非网页内容的内容安全策略(我们通常不希望允许)授予unsafe-eval
。 我可以控制 CSP,所以我想知道是否有可能制定一个 CSP,它通常会拒绝unsafe-eval
,同时将应用程序本身所代表的"域">列入白名单?
或者也许是另一种实现这种不涉及松动CSP的通信的方法? 从理论上讲,这可以通过网页监听websocket和应用程序将消息发送到服务器然后转发到websocket来实现,但这似乎非常严厉。
感谢您的任何建议!
'unsafe-eval'
充当全局页面标志,因此您不能在粒度模式下使用它。
只有使用 WebSocket 才能进行全面的双向通信。
此外,要从应用程序端启动通信,您可以使用 XMLHttpRequest。
要从服务器端启动通信,您可以使用服务器发送事件 (SSE)。您可以查看Mercure:基于SSE构建的实时通信协议(发布-订阅)。