我正在开发一个跨平台的浏览器扩展程序,并且基于Chrome的方式将我的所有代码都基于这样做。我指望可以从选项页面访问后台页面,这在Safari扩展中证明是不可能的(因为没有选项页面这样的东西)。您只能 从扩展程序弹出窗口和背景页面本身访问safari.extension.globalPage.contentWindow
。
现在,我有一个选项页面,这是扩展程序包中的一个html页面,到目前为止,我还没有找到一种方法让Safari给它扩展“权限”。我最接近的是添加一个仅在选项页面上添加的内容脚本。这看起来有点傻,因为html页面本身就在扩展包中?!
其他人建议使用异步乒乓样式message
事件处理程序,甚至是canLoad
- 机制(“仅”能够在beforeload
- 事件中运行)。通过伪造canLoad
,我能够破解BeforeLoadEvent
- 同步消息传递机制:
// Content script (run from anywhere)
var result = safari.self.tab.canLoad(new BeforeLoadEvent, "data")
-> "return value"
// Background page
safari.application.addEventListener('message', function(e) {
if ( e.name === "canLoad" )
e.message = "return value";
}, true);
这是一个黑客攻击,但它确实有效。但是,我被消息传输序列化瘫痪了,因为我需要能够从后台页面访问我的对象上的方法和数据。反正有吗?
可行的方法,但我不知道是否可能:
window
- 来自背景页面的对象。那可能吗?任何建议和黑客的解决方法都会有所帮助。