self.port未定义错误[关于mozilla附加SDK 1.8]

时间:2012-07-11 05:59:27

标签: firefox-addon firefox-addon-sdk

按照this指南,我做了一点变化,我一直收到此错误

  

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的浏览器编辑器,有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

经过一些测试和调试后,我发现了我的两个错误,对不起,我没有把整个代码放进去,因为我觉得它没有关系:

我在 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中删除了脚本和样式标记,因为它们已经在pageMod中,并修复了data.url('js / base.js')和其他的路径。现在我了解了附加范围中的脚本可以访问DOM范围并进行更改,但DOM内的脚本不能(它们可以?)与附加范围进行通信。如果您希望脚本与加载项进行交互,则应将它们保留在加载项范围内。我希望帮助那些犯同样错误的人。 谢谢canuckistani。