self.port是未定义的错误[在mozilla插件SDK 1.8]



根据本指南,我做了一些更改,并不断收到此错误

self.port未定义在base.js〔我的内容代码〕

这里是我的附加代码

PageMod({
    include: [data.url('base.html')],
    contentScriptWhen: 'start',
    contentScriptFile: [data.url('jquery-1.7.2.min.js'),data.url('jquery-ui-1.8.21.custom.min.js'),data.url('base.js')],
    contentStyleFile: [data.url('css/mint-choc/jquery-ui-1.8.21.custom.css'),data.url('css/base.css')],
    onAttach: function(worker) {
            worker.port.on("request", function(txt) {
                console.log(txt);
                worker.port.emit("response","response for "+txt);
            });
    }
});

以及我的内容代码

// initialized by jQuery
$(function() {
    self.port.on("response",function(txt){console.log("response "+txt);}) //this line is where the error point to.
    $('#tabs').tabs();
    testLoadLinks();
});
function testReceiveRequest(request) {
    console.log('received:',request);
    self.port.emit("request",request);
}

我正在使用SDK 1.8版本的浏览器编辑器,有人能帮我解决这个问题吗?

经过一些测试和调试,我发现了我的两个错误,很抱歉我没有把整个代码放进去,因为我认为它不相关:

我在base.html中有这个

<link type="text/css" href="css/mint-choc/jquery-ui-1.8.21.custom.css" rel="stylesheet" />
<link type="text/css" href="css/base.css" rel="stylesheet" />
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.21.custom.min.js"></script>
<script type="text/javascript" src="js/base.js"></script>

这在main.js

PageMod({
include: [data.url("base.html")],
contentScriptWhen: 'start',
contentScriptFile: [data.url('jquery-1.7.2.min.js'),data.url('jquery-ui-1.8.21.custom.min.js'),data.url('base.js')],
contentStyleFile: [data.url('css/mint-choc/jquery-ui-1.8.21.custom.css'),data.url('css/base.css')],
onAttach: function(worker) {
        console.log("attaching...")
        worker.port.on("request", function(txt) {
            console.log(txt);
            worker.port.emit("response","response for "+txt);
        });
}
});

我的脚本在/data/js/文件夹中,找不到它们,因此没有在main.js中加载脚本的pageMod部分,但它们是由DOM中的内容脚本本身加载的,其中self.port未定义。我刚刚从base.html中删除了script和styles标记,因为它们已经在pageMod中了,并修复了data.url('js/base.js')和其他文件中的路径。现在,我了解到附加作用域中的脚本可以访问DOM作用域并更改它,但DOM中的脚本不能(它们可以?)与附加作用域通信。如果希望脚本与加载项交互,则应将它们保留在加载项范围内。我希望能帮助犯同样错误的人。谢谢canuckistani。

最新更新