Firefox插件:为什么面板中的self.port'的contentscript未定义

Firefox addon: Why the self.port in the panel's contentscript is undefined?

本文关键字:port 未定义 contentscript self Firefox 为什么 插件      更新时间:2023-09-26

我在开发Firefox插件时遇到了一件奇怪的事情:我写了这样的代码(我将注释代码从Chrome扩展转换为Firefox插件代码):

function sendStoreIdentitiesMessage(identities, remember){
    console.log("Storing identities: "+identities.length);
    if(remember==null){
        remember=false;
    }
    //extension.sendMessage({type:"save.identities", identities:identities, remember:remember}, function(response) {
    //  identitiesNum=identities.length;
    //  identitiesDate=new Date();
    //  sendGetPageIdsMessage(function(){showCodeImageSuccess();});
    //});
    
    self.postMessage({type:"save.identities", identities:identities, remember:remember});
    self.port.on("response.save.identities",function(response){
        identitiesNum=identities.length;
        identitiesDate=new Date();
        sendGetPageIdsMessage(function(){showCodeImageSuccess();});
    });
}

当我用AddonBuilder编译它时,它会得到错误:

"错误:NS_Error_XPC_NOT_ENOUGH_ARGS:参数不足[nsIDOMWindow.postMessage]"

然后我把代码改成这样:

function sendStoreIdentitiesMessage(identities, remember){
    console.log("Storing identities: "+identities.length);
    if(remember==null){
        remember=false;
    }
    //extension.sendMessage({type:"save.identities", identities:identities, remember:remember}, function(response) {
    //  identitiesNum=identities.length;
    //  identitiesDate=new Date();
    //  sendGetPageIdsMessage(function(){showCodeImageSuccess();});
    //});
    
    self.port.emit("message",{type:"save.identities", identities:identities, remember:remember});
    self.port.on("response.save.identities",function(response){
        identitiesNum=identities.length;
        identitiesDate=new Date();
        sendGetPageIdsMessage(function(){showCodeImageSuccess();});
    });
}

我又犯了一个错误:

TypeError:self.port未定义。

那么,怎么了?

self更改为addon。详细文档在此处。