我正在开发一个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" />
),但现在它只返回一条空白错误消息。
奇怪的空白错误消息。
这些错误导致附加组件的其余部分根本无法工作,因此我无法继续开发它,直到修复为止。什么是可能的解决方案?
我找到了解决方案。我必须在第一个语句之前添加一行JavaScript。
var AMO_Uedit_Beta_Firefox = { // Will not work!
...
例如,如果我在前面加console.log
。
console.log("");
var AMO_Uedit_Beta_Firefox = { // This will work!
...
唯一的问题是,为什么这有效?
答案 0 :(得分:0)
看起来Uedit.js
文件的路径错误。您应该在xul叠加层中使用绝对路径。
答案 1 :(得分:-1)
作为erikvold has said,指向Uedit.js
脚本的链接错误。这是错误的最小值,也是控制台中抱怨的内容:browser.xul:5
是browser.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/
。但是,正确的假设是,除了您的代码隐含的其他代码(content
和skin
)之外,您还应使用适当的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!
...
我自己解决了这个问题,虽然解决方案很奇怪。