0

按照指南,我做了一些改动,但一直收到此错误

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

4

1 回答 1

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。

于 2012-07-13T00:03:56.670 回答