使用Firefox插件我正在使用下面的附加脚本调用内容js和html页面是附加脚本的代码片段。
var textChk = require("sdk/panel").Panel({
position: {
top: 0,
right: 0
},
hight: 100,
contentURL: data.url("textChk.html"),
contentScriptFile: data.url("content.js")
});
function handleClick() {
textChk.show();
textChk.port.on("first-para", function(firstPara) {
console.log(firstPara);
});
textChk.port.emit("get-first-para");
}
,内容脚本的代码如下
function loginChk()
{
self.port.on("get-first-para", getFirstPara);
}
function getFirstPara() {
var userId = document.getElementById("usermail").value;
var pass = document.getElementById("password").value;
if (userId.length > 0 && pass.length > 0) {
var firstPara = userId + " ** " + pass;
self.port.emit("first-para", firstPara);
}
}
现在当我调用loginChk()函数时,我收到以下错误
ReferenceError: loginChk is not defined
我无法弄清楚问题出在哪里,因为这在早期的另一个附加代码中工作。有人可以建议我如何纠正这个错误吗?
答案 0 :(得分:2)
我们讨论过IRC,但仅供将来参考。
您可以开始使用“./”作为数据文件夹的快捷方式(因此您不再需要数据模块来处理这些微不足道的事情);并删除contentScriptFile
:
var textChk = require("sdk/panel").Panel({
position: {
top: 0,
right: 0
},
hight: 100,
contentURL: "./textChk.html"
});
“content.js”可以直接包含在“textChk.html”文件中,只需使用脚本标记:
<!-- textChk.html -->
<html>
<head>
<!-- meta, etc -->
<script src="content.js"></script>
</head>
<!-- rest of your file, body, etc -->
</html>
从content.js
开始,您现在可以使用addon.port
代替self.port
直接从附加代码发送和接收消息,有关详细信息,请参阅documentation about sdk panel。
handleClick
,我认为这与点击按钮有关 - 顺便说一下,你知道你可以attach a panel to a button吗? - 显示面板,也可以有点改进。首先,你可以在外面添加监听器,否则每次显示面板时你都会添加一个新的监听器,你可能只需要一次。另外,您只想在显示面板时获取段落,所以:
var textChk = require("sdk/panel").Panel({ /* ...*/ });
textChk.port.on("first-para", (firstPara) => console.log(firstPara));
textChk.on("show", () => textChk.port.emit("get-first-para"));
function handleClick() {
textChk.show();
}
那将是一个更好的事件流程。
说没有实际调用loginChk
的代码我无法分辨出什么是错的,因为我无法看到你的附加组件的流程。
我可以告诉你,如果loginChk
实际上只添加了一个监听器,你就不需要它,你可以像我一样把它放在任何函数中。
希望它有所帮助。