JavaScript 从网页到 Safari 扩展

JavaScript from a Web page to a Safari extension

网页能否在 JavaScript 级别直接与 Safari 扩展通信?

理想情况下,我希望通过某种方式在扩展程序的全局页面中调用 JavaScript,但与注入的脚本对话也可以,因为它可以通过消息与全局页面对话。

直接函数调用不起作用。页面和注入脚本的 window 对象是不同的。 safari.self 不适用于常规网页。在网页代码可见的其他 DOM 对象中是否有 dispatchMessage

找到一个笨拙的解决方法。注入的脚本和页面共享 document 对象。注入的脚本会在页面中创建一个 HTML 元素(在我的例子中是 <input type="hidden">),给它一个商定的 ID,并挂钩它的 onclick。该页面将通过 ID 找到该元素并调用 onclick,同时传递一些参数。注入的脚本得到控制。对于脚本到页面的回调,我会在同一元素上使用 onchange

调用是同步的,甚至。

然后,注入的脚本会使用 safari.self.tab.dispatchMessage() 将消息传递到扩展程序的全局页面。