是否可以允许本机应用程序 webview 主机使用 `unsafe-eval`,同时拒绝其他内容?
Is it possible to allow `unsafe-eval` for native app webview hosts, while denying it to other content?
我希望在本机 iOS/Android webview 控制器和 webview 当前加载内容的 javascript 上下文之间实现双向通信。到目前为止,这是我得到的:
- 我可以通过
WKScriptMessageHandler
(iOS)和AddJavascriptInterface
(Android)实现js->app通信。
- 对于应用程序 -> js 通信,我可以在加载页面时注入脚本,但我希望能够在页面为“运行”时调用 javascript以及。
WKWebView
和 Android 的 WebView
都支持 Eval
类型的函数,但是浏览器引擎不允许这样做,除非 unsafe-eval
被网页的授权content 的内容安全策略(通常我们不想允许。)我可以控制 CSP,所以我想知道是否可以制定一个 CSP 来拒绝 unsafe-eval
in一般,同时特别将应用本身代表的“域”列入白名单?
或者另一种不涉及放松 CSP 的通信方式?这在理论上可以通过网页监听 websocket 并将消息发送到服务器,然后将消息转发到 websocket,但这似乎很笨拙。
感谢任何建议!
'unsafe-eval'
充当 global page flag,因此您不能在粒度模式下使用它。
只有使用 WebSockets.
才能实现完整的双向通信
也可以从应用程序端发起通信,您可以使用XMLHttpRequest。
并且要从服务器端发起通信,您可以使用 Server-Sent Events (SSE). You can have a look on Mercure: a real-time communication protocol (publish-subscribe) built on top of SSE.
我希望在本机 iOS/Android webview 控制器和 webview 当前加载内容的 javascript 上下文之间实现双向通信。到目前为止,这是我得到的:
- 我可以通过
WKScriptMessageHandler
(iOS)和AddJavascriptInterface
(Android)实现js->app通信。 - 对于应用程序 -> js 通信,我可以在加载页面时注入脚本,但我希望能够在页面为“运行”时调用 javascript以及。
WKWebView
和 Android 的WebView
都支持Eval
类型的函数,但是浏览器引擎不允许这样做,除非unsafe-eval
被网页的授权content 的内容安全策略(通常我们不想允许。)我可以控制 CSP,所以我想知道是否可以制定一个 CSP 来拒绝unsafe-eval
in一般,同时特别将应用本身代表的“域”列入白名单?
或者另一种不涉及放松 CSP 的通信方式?这在理论上可以通过网页监听 websocket 并将消息发送到服务器,然后将消息转发到 websocket,但这似乎很笨拙。
感谢任何建议!
'unsafe-eval'
充当 global page flag,因此您不能在粒度模式下使用它。
只有使用 WebSockets.
才能实现完整的双向通信也可以从应用程序端发起通信,您可以使用XMLHttpRequest。
并且要从服务器端发起通信,您可以使用 Server-Sent Events (SSE). You can have a look on Mercure: a real-time communication protocol (publish-subscribe) built on top of SSE.