内容Js函数未链接错误 - “函数未定义”

时间:2015-08-13 05:17:23

标签: javascript function firefox firefox-addon firefox-addon-sdk

使用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

我无法弄清楚问题出在哪里,因为这在早期的另一个附加代码中工作。有人可以建议我如何纠正这个错误吗?

1 个答案:

答案 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实际上只添加了一个监听器,你就不需要它,你可以像我一样把它放在任何函数中。

希望它有所帮助。