"变量未定义"我的Firefox扩展程序中的错误

时间:2015-06-09 21:53:12

标签: javascript debugging firefox firefox-addon xul

我正在开发一个Firefox附加组件。当我运行它时,我打开浏览器控制台,它说AMO_Uedit_Beta_Firefox is not defined :browser.xul

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://Uedit/skin/skin.css" type="text/css"?>
<!DOCTYPE Uedit SYSTEM "chrome://Uedit/locale/translations.dtd">
<overlay id="Uedit-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    <script src="Uedit.js" />
    <toolbarpalette id="BrowserToolbarPalette">
        <toolbarbutton id="Uedit" class="toolbarbutton-1" label="Edit HTML" tooltiptext="Edit HTML" oncommand="AMO_Uedit_Beta_Firefox.Uedit()" />
    </toolbarpalette>
</overlay>

调用作为对象一部分的函数的工具栏按钮(AMO_Uedit_Beta_Firefox)。

我仔细检查了名字,两者都匹配。是因为脚本没有正确加载吗?我确定变量名称不能以大写字母开头。

var AMO_Uedit_Beta_Firefox={ // This is for "wrapping the loose variables."

文件的引用都完全相同。可能是因为脚本根本没有加载吗?

<toolbarbutton id="Uedit" class="toolbarbutton-1" label="Edit HTML" tooltiptext="Edit HTML" oncommand="AMO_Uedit_Beta_Firefox.Uedit()" />

我尝试将相对网址(<script src="Uedit.js" />)更改为browser.xul中的绝对网址(<script src="chrome://Uedit/Uedit.js" />),但现在它只返回一条空白错误消息。

  

enter image description here   奇怪的空白错误消息。

这些错误导致附加组件的其余部分根本无法工作,因此我无法继续开发它,直到修复为止。什么是可能的解决方案?

编辑:

我找到了解决方案。我必须在第一个语句之前添加一行JavaScript。

var AMO_Uedit_Beta_Firefox = { // Will not work!
    ...

例如,如果我在前面加console.log

console.log("");
var AMO_Uedit_Beta_Firefox = { // This will work!
    ...

唯一的问题是,为什么这有效?

3 个答案:

答案 0 :(得分:0)

看起来Uedit.js文件的路径错误。您应该在xul叠加层中使用绝对路径。

答案 1 :(得分:-1)

作为erikvold has said,指向Uedit.js脚本的链接错误。这是错误的最小值,也是控制台中抱怨的内容:browser.xul:5browser.xul中的第5行,即:

<script src="Uedit.js" />

你说你已经尝试过:

<script src="chrome://Uedit/Uedit.js" />

那不行。它至少应该是这样的:

<script src="chrome://Uedit/content/Uedit.js" type="application/x-javascript" />

请注意content/之后的//Uedit/。但是,正确的假设是,除了您的代码隐含的其他代码(contentskin)之外,您还应使用适当的locale行设置chrome.manifest。它还假定Uedit.js在该目录中。假设加载项的目录结构正常, chrome.manifest 文件中的内容行应如下所示:

content        Uedit        chrome/content/

至于它实际工作,我们无法知道它是否会起作用,因为您没有包含定义所有AMO_Uedit_Beta_Firefox,特别是AMO_Uedit_Beta_Firefox.Uedit()的源代码。例如,除了上述问题之外,很容易出现语法错误,导致脚本无法加载。当您尝试执行AMO_Uedit_Beta_Firefox作为AMO_Uedit_Beta_Firefox.Uedit() toolbarbutton的代码时,此类语法错误会导致控制台报告oncommand未定义。< / p>

您可以通过在脚本加载时在控制台中打印某些内容(即在Uedit.js的定义之外)来轻松测试以查看您的AMO_Uedit_Beta_Firefox脚本是否正在加载。

答案 2 :(得分:-2)

我找到了解决方案。我必须在第一个语句之前添加一行JavaScript。

var AMO_Uedit_Beta_Firefox = { // Will not work!
    ...

例如,如果我在前面加console.log

console.log("foo bar");
var AMO_Uedit_Beta_Firefox = { // This will work!
    ...

我自己解决了这个问题,虽然解决方案很奇怪。