【问题标题】:Is it possible to allow `unsafe-eval` for native app webview hosts, while denying it to other content?是否可以允许本机应用程序 webview 主机使用 `unsafe-eval`,同时拒绝其他内容?
【发布时间】:2021-12-23 07:22:33
【问题描述】:

我希望在原生 iOS/Android webview 控制器和 webview 当前加载内容的 javascript 上下文之间实现双向通信。到目前为止,这是我所得到的:

  • 我可以通过WKScriptMessageHandler(iOS)和AddJavascriptInterface(Android)实现js->app通信。
  • 对于应用程序 -> js 通信,我可以在页面加载时注入脚本,但我也希望能够在页面“运行”时调用 javascript。 WKWebView 和 Android 的 WebView 都支持 Eval-type 函数,但浏览器引擎不允许这样做,除非网页内容的内容安全策略(我们不想允许,一般来说。)我可以控制 CSP,所以我想知道是否有可能制定一个 CSP 拒绝unsafe-eval 一般,同时专门将应用程序本身代表的“域”列入白名单?

或者也许是另一种方式来实现不涉及放松 CSP 的那种通信?这在理论上可以通过监听 websocket 的网页和应用程序发送消息到服务器然后转发到 websocket 来实现,但这似乎相当笨拙。

感谢您的任何建议!

【问题讨论】:

    标签: android ios android-webview wkwebview content-security-policy


    【解决方案1】:

    'unsafe-eval' 充当global page flag,因此您不能在粒度模式下使用它。

    只有使用WebSockets,才能进行全面的双向通信。

    也可以从应用端发起通信,可以使用XMLHttpRequest
    要从服务器端发起通信,您可以使用Server-Sent Events (SSE)。你可以去Mercure: a real-time communication protocol (publish-subscribe) built on top of SSE看看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-27
      • 2018-08-23
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2016-01-17
      • 2015-02-21
      相关资源
      最近更新 更多