莫兹拉插件.required(SDK/tabs).attach() 不起作用

mozilla addon. required(sdk/tabs).attach() not working

本文关键字:tabs attach 不起作用 SDK 插件 required      更新时间:2023-09-26

我开始为Firefox开发插件,但我遇到了一个问题。

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

当我尝试在 Firefox 每晚 36 中执行此代码时,它说"类型错误:窗口为空",但在每晚 32 中它工作正常!在最后一个 fierfox(不是每晚)中,此代码也不起作用。

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

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

我能够使用以下代码重现此问题:

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方法时使用它?