根据本指南,我做了一些更改,并不断收到此错误:
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。