2

我有一個Chrome擴展其行爲類似Web應用程序(除了使用Chrome。* API和跨域請求)與多個HTML頁面,所有使用background.html與NPAPI插件進行通信。移植Chrome擴展與多個應用程序頁面,火狐

延伸的結構(從擴展的根)如下:

  • background.html
  • 插件/(NPAPI插件束)
  • 前端/
    • main.html中
    • foo.html
    • bar.html
    • ..

的background.html被擴展時加載安裝並加載NPAPI插件,無限期地運行(直到瀏覽器關閉或擴展名是失活/去除)。

當點擊擴展程序的工具欄按鈕時,main.html被打開,它提供了一個UI導航來訪問其他頁面foo.html和bar.html。

這些頁面中的任何一個都使用chrome.extension.getBackgroundPage()來調用NPAPI插件的方法並同步接收響應。


火狐

Concerining背景NPAPI插件,這已經回答了在previous question of mine

從當前插件sdk的可用選項中,Firefox將消息傳遞限制爲JSON可序列化的值,因此我不能再直接調用NPAPI插件方法(通過傳遞插件的返回值來解決)。

問題仍然涉及前端應用程序頁面,這是本地的,應該是可信的腳本。我已經嘗試將它們加載爲面板,但面板似乎不適合完整的UI頁面,而是適用於小型信息片段。

有沒有一種方法來加載這些頁面,而不用在每個頁面中注入一個page-mod contentscript?(這也需要在頁面導航時注入新腳本)。

+0

嗨!你是否設法將擴展名轉換爲Firefox?我有與chrome.extension API相同的問題。請告訴我,如果有可能@oliwr – Ofear 2012-10-25 09:49:09

+0

嗨Ofear,是的,我確實設法手動轉換擴展名,但需要前面提到的頁面模塊。這確實意味着消息傳遞的努力增加了,但它可以被轉換。如果你有詳細的問題,請隨時給我發一封電子郵件。 – oliverguenther 2012-10-25 09:58:44

回答

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); 

參考