网页可以直接与JavaScript级别的Safari扩展程序通信吗?
理想情况下,我想在扩展程序的全局页面中调用JavaScript,但是与注入的脚本交谈也可以,因为它可以通过消息与全局页面通信。
直接函数调用不起作用。页面和注入的脚本具有的select from table where ([]colA;colB) in ([]colA:`A`C;colB:`B`D)
对象是不同的。 window
不适用于常规网页。在网页代码可见的其他DOM对象中是否有safari.self
?
答案 0 :(得分:1)
找到了一个笨拙的解决方法。注入的脚本和页面共享document
对象。注入的脚本将在页面中创建一个HTML元素(在我的情况下为<input type="hidden">
),给它一个商定的ID,并挂钩它的onclick
。页面将按ID找到该元素并调用onclick
,并传递一些参数。注入的脚本获得控制权。对于脚本到页面的回调,我在同一个元素上使用onchange
。
调用是同步的,甚至是。
然后,注入的脚本会使用safari.self.tab.dispatchMessage()
将消息传递到扩展程序的全局页面。