0

网页上的 javascript 代码如何触发向 Safari Web 扩展发送消息?

它似乎browser.runtime.connectNative()将允许后台脚本与本机应用程序通信。更具体地说,有状态数据可以通过 runtime.Port 发送。

似乎browser.runtime.connect()还允许内容脚本与后台脚本进行通信,但是一旦存在内容脚本,就会向最终用户发出以下(正确的)警告:

此扩展程序可以读取和更改网页

似乎没有记录的网页将数据发送到后台脚本的机制。这是怎么做到的?

注意:这个问题指的是苹果在 2020 年针对 MacOS 和 2021 年针对 iOS 发布的 Safari Web Extensions。

4

1 回答 1

1

网页无法访问browser.runtime.*方法,因此您唯一的选择是使用window.postMessage(). MDN 上写了一些关于在扩展中使用它的内容,但是它没有明确说明它是否应该工作。

我刚刚做了一些测试(在 Safari / Monterey 上),我的后台脚本无法*从网页中听到带有目标的 window.postMessage(没有内容脚本,只是在页面中的 javascript 中),所以这条路似乎关闭了。

如果你想与原生应用程序通信,你可以尝试一些奇怪的事情,比如注册一个自定义 url,或者打开一个端口和 websocket-connect 到那个。我想理论上你可以让本机应用程序 ping 后台脚本,后台脚本可以插入一个内容脚本,然后可以进行通信,这似乎有点令人费解。

于 2021-10-27T11:41:35.183 回答