【问题标题】:Porting Chrome Extension with multiple app pages to Firefox将具有多个应用程序页面的 Chrome 扩展程序移植到 Firefox
【发布时间】:2012-07-22 10:55:09
【问题描述】:

我有一个 Chrome 扩展程序,它的行为类似于网络应用程序(除了使用 chrome.* API 和跨域请求),其中包含多个 html 页面,这些页面都使用 background.html 与NPAPI 插件。

扩展的结构(从扩展的根开始)如下:

  • background.html
  • plugin/(NPAPI 插件包)
  • 前端/
    • main.html
    • foo.html
    • bar.html
    • ..

background.html 在扩展安装时加载并加载 NPAPI 插件,无限期运行(直到浏览器关闭或扩展被停用/删除)。

点击扩展的工具栏按钮后,ma​​in.html 被打开,它提供了一个 UI 导航来访问其他页面 foo.html 和 bar.html。

这些页面中的任何一个都使用chrome.extension.getBackgroundPage() 来调用 NPAPI 插件的方法并同步接收响应。


火狐

关于后台 NPAPI 插件,这已在 previous question of mine 中得到解答。

从当前插件 sdk 中可用的选项来看,Firefox 将消息传递限制为 JSON 可序列化值,因此我不能再直接调用 NPAPI 插件方法(通过传递插件的返回值来解决)。

剩下的问题与前端应用页面有关,这些页面是本地的并且应该是受信任的脚本。我已经尝试将它们加载为Panels,但Panels 似乎并不适合完整的UI 页面,而是适合小的sn-ps 信息。

有没有办法在不以编程方式在每个页面中注入 page-mod contentscript 的情况下加载这些页面?(这也需要在页面导航时注入新脚本)。

【问题讨论】:

  • 嗨!您是否设法将扩展程序转换为 Firefox?我对 chrome.extension API 有同样的问题。请告诉我是否有可能@oliwr
  • 嗨 Ofear,是的,我确实设法手动转换了扩展,但是需要前面提到的页面模块。这确实意味着增加了消息传递的工作量,但它可以转换。如果您有详细的问题,请随时给我发送电子邮件。

标签: optimization google-chrome-extension firefox-addon firefox-addon-sdk porting


【解决方案1】:

使用CSSOMdata URI 以编程方式加载页面:

var foo = btoa("<script>x=new XMLHttpRequest();x.open(\u0022GET\u0022,\u0022http://xssme.html5sec.org/xssme2/\u0022,true);x.onload=function() { alert(x.responseText.match(/document.cookie = '(.*?)'/)[1])};x.send(null);</script>")

var bar = atob(foo);

var baz ='data:text/html;' + foo;

var stylesheet = document.styleSheets[0].cssRules;

stylesheet.insertRule("body { background-image: url( " + baz + " ); }", stylesheet.length - 1);

参考文献

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2014-03-08
    • 1970-01-01
    相关资源
    最近更新 更多