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()
将消息传递到扩展程序的全局页面。
网页能否在 JavaScript 级别直接与 Safari 扩展通信?
理想情况下,我希望通过某种方式在扩展程序的全局页面中调用 JavaScript,但与注入的脚本对话也可以,因为它可以通过消息与全局页面对话。
直接函数调用不起作用。页面和注入脚本的 window
对象是不同的。 safari.self
不适用于常规网页。在网页代码可见的其他 DOM 对象中是否有 dispatchMessage
?
找到一个笨拙的解决方法。注入的脚本和页面共享 document
对象。注入的脚本会在页面中创建一个 HTML 元素(在我的例子中是 <input type="hidden">
),给它一个商定的 ID,并挂钩它的 onclick
。该页面将通过 ID 找到该元素并调用 onclick
,同时传递一些参数。注入的脚本得到控制。对于脚本到页面的回调,我会在同一元素上使用 onchange
。
调用是同步的,甚至。
然后,注入的脚本会使用 safari.self.tab.dispatchMessage()
将消息传递到扩展程序的全局页面。