-1

我有這樣的結構:如何從firefox插件中的面板中啓動面板?

Addon Directory 
    index.js 
    Data Directory 
     -panel1.html 
     -panel1.js 
     -panel2.html 
     -panel2.js 

我在index.js定義panel1panel2。我將panel1附加到工具欄按鈕上。 panel1.html包含一個鏈接,該鏈接應該打開panel2.html

的問題是: 當我打電話panel2.show()panel1.js,我得到這個錯誤:panel2.show is not a function 這是代碼:

var geLink= document.getElementById("mylink"); 
getLink.addEventListener('click', function (event) 
      { 
       console.log("link clicked"); 
       panel2.show(); 
       },false); 

如何從PANEL1火是Panel2?這可能嗎?

我知道show方法不能從主插件腳本之外調用。那麼,點擊panel1中的鏈接時,顯示panel2.html並執行其內容腳本的正確方法是什麼?是否使用window.open()? 如果是這種情況,我怎麼能告訴panel2腳本不會被執行,直到panel2.html窗口打開?因爲當我嘗試它時,panel2腳本在我點擊面板1中的鏈接之前以及打開panel2.html頁面之前就已經被執行。

+0

請[編輯]你的問題是關於話題:包括[mcve]重複了這個問題。尋求調試幫助的問題(「爲什麼代碼不按我想要的方式工作?」)必須包括:(1)期望的行爲,(2)特定問題或錯誤,以及(3)重現它所需的最短代碼*在問題本身*。另請參閱:[我可以在這裏詢問什麼主題?](http://stackoverflow.com/help/on-topic)和[問]。 – Makyen

+0

基本上,您需要將消息傳遞給主腳本以打開panel2。有很多方法可以這樣做。但是,您應該知道:可以有**只有一個** [sdk/panel](https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/panel)打開一段時間(即來自* all *附加SDK的插件,安裝在Firefox配置文件中,而不僅僅是附加組件)。因此,您*無法*同時打開panel1和panel2。請參閱:[如何在Firefox附加SDK中同時顯示2個sdk /面板?](https://stackoverflow.com/q/38279839) – Makyen

+1

需要[mcve]的原因是*我們想要幫助*。如果我們不需要重新創建任何複製問題所需的代碼,它就更容易幫助。這是你已有的代碼。所以,請幫助我們來幫助您,並提供一個*完整的* [mcve]來重現問題。如果沒有[mcve],甚至開始幫助你的工作量要高得多,這顯着減少了願意/能夠幫助你的人數。即使我們付出了額外的努力,我們也必須在可能出現問題的重要部分猜測**。 – Makyen

回答

0

無法從第一個面板開啓第二個面板。不可能同時有兩個面板。

Opening a panel will close any panel created by the Panel() constructor that is already open, even if that panel was opened by a different Add-on SDK based extension.

但是,代替面板,您可以觸發一個包含內容腳本的普通HTML頁面。在索引創建pageMod對象:

var pageMod = require('sdk/page-mod').PageMod({ 
    include: "resource://extensionfile/data/page.html", 
    contentScriptFile:'./myscript.js', 
    contentScriptWhen: 'ready', 
    onAttach: function(worker) { 
    worker.port.emit("going-from-index", myarray); 
    worker.port.on("coming-from-panel", receivedvalue); } 
});//end var pageMod 

在面板中,聽鏈接點擊,然後打開HTML頁:

link = document.getElementById("click-link"); 
link.addEventListener('click',function (event) 
            { 
             window.open('page.html'); 
            } 
          );