可以访问后台页面的Safari扩展选项页面

时间:2012-10-26 17:52:24

标签: safari cross-platform safari-extension

我正在开发一个跨平台的浏览器扩展程序,并且基于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 - 来自背景页面的对象。那可能吗?
  • 消息传递,需要绕过消息序列化
  • 我可以将对象附加到选项页面并从中获取的任何共享/全局对象吗?
  • 让Safari从内容脚本沙箱外部运行options.html页面?它适用于Chrome,因为它们都在扩展程序包中。野生动物园也不这么做也很烦人。
  • 从弹出窗口中运行选项页面。这很有希望,但它会破坏野生动物园(非常有希望!)。但是,从它的外观来看,它只是在我的options.html页面中与CSS动画有关。最大的问题是它必须能够打开OAuth2弹出窗口,但由于能够以编程方式打开弹出框,它可能不是问题。但是,这个选项是最现实的,但我宁愿在新标签页中打开它。

任何建议和黑客的解决方法都会有所帮助。

0 个答案:

没有答案