mozilla插件。必需(sdk / tabs).attach()无效

时间:2014-11-17 15:35:33

标签: javascript firefox firefox-addon firefox-addon-sdk mozilla

我开始为firefox开发插件,我遇到了问题。

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

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

当我尝试在Firefox中每晚尝试执行此代码时,它会说" TypeError:window为null",但是在Nightly 32中它运行正常!在最后的fierfox(不是每晚)这段代码也不起作用。

我试图在夜间浏览器调试器控制台中执行此代码,但结果相同(窗口为空)。

我可以看到,在sdk / tabs / utils.js中,browser.contentWindow为null。我认为这是我的窗口对象,但为什么它是null?

1 个答案:

答案 0 :(得分: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

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');"
                });
            }
        });
    }
});

如果您不能使用attach方法,可能还在使用它?