2014-11-17 34 views
1

我開始開發Firefox的插件,我有一個問題。mozilla addon。需要(sdk/tabs).attach()不工作

var tabs = require('sdk/tabs'); 

tabs.on('ready', function (tab) { 
    tab.attach({ 
     contentScript: "alert('azaza');", 
     onMessage: function(message) { 
      console.log("message"); 
     } 
     }); 
}) 

當我嘗試在Firefox每晚執行此代碼36它說:「類型錯誤:窗口爲空」,但在Nightly 32它工作正常!在最後fierfox(不是每晚)這段代碼不工作。

我試圖在夜間的瀏覽器調試器控制檯中執行此代碼,但結果相同(窗口爲空)。

我可以看到,在sdk/tabs/utils.js中,browser.contentWindow爲null。我認爲這是我的窗口對象,但爲什麼它是空的?

+0

如果你想影響每一頁,你最好使用[PageMod](https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/page-mod)。 – willlma

+0

我很困惑 - 你是在附加組件還是在瀏覽器工具箱工具中運行此代碼?它在瀏覽器工具箱工具中無法正常工作。儘管在Nightly 36中適合我。 – canuckistani

+0

這是我的插件代碼的一部分。在瀏覽器工具箱工具中,我可以看到在這裏拋出異常。 – alborozd

回答

0

我能重現此問題與下面的代碼:

var { ActionButton } = require("sdk/ui/button/action"); 
var self = require("sdk/self"); 
var tabs = require('sdk/tabs'); 

var button = ActionButton({ 
    icon: self.data.url("icon-16.png"), 
    id: "my-button", 
    label: "my button", 
    onClick: function() { 
     tabs.open({ 
      url: self.data.url("text-entry.html") 
     }); 
     tabs.activeTab.attach({ 
      contentScript: "alert('azaza');" 
     }); 
    } 
}); 

要解決這個問題,我不得不使用onOpen而不是使用activeTab:也許您使用的是attach

var button = ActionButton({ 
    icon: self.data.url("icon-16.png"), 
    id: "my-button", 
    label: "my button", 
    onClick: function() { 
     tabs.open({ 
      url: self.data.url("text-entry.html"), 
      onOpen: function() { 
       tabs.activeTab.attach({ 
        contentScript: "alert('azaza');" 
       }); 
      } 
     }); 
    } 
}); 

方法,當你不能使用它?