我正在开发一个 Firefox 扩展(我是新手,所以请放轻松),我似乎遇到了一个非常烦人的问题,阻碍了我取得任何进展。
我有三个 .js 文件:main.js
,hello.js
和awesome.js
一个 .xul 文件,awesomeOverlay.xul
. main.js
是这样的:
//main.js
if(typeof(MyExtension) === "undefined") {
var MyExtension = {};
}
MyExtension.Main = {
browser : null,
init : function() {
if("gBrowser" in window) {
MyExtension.Main.browser = window.gBrowser;
MyExtension.Main.browser.addEventListener("DOMContentLoaded", MyExtension.Main.onPageLoad, true);
window.content.console.log("Yay, recognized the browser!");
},
onPageLoad : function(e) {
var doc = e.originalTarget;
var regex = /stackoverflow\.com/;
if(regex.test(doc.location.href)) {
window.content.console.log("Visiting stackoverflow!");
alert("Loaded stackoverflow!");
}
e.originalTarget.defaultView.addEventListener("unload", function(e){MyExtension.Main.onPageUnload(e), true);
},
onPageUnload : function(e) {
var regex = /stackoverflow\.com/;
var doc = e.originalTarget;
if(regex.test(doc.location.href)) {
alert("Found a solution to your problem, huh? Great!");
}
}
};
在我的另外两个 .js 文件中,我有像MyExtension.Hello = {...}
和之类的对象MyExtension.Awesome = {...}
。问题是,当我加载 stackoverflow.com 时,我没有在控制台中收到任何警报或日志。我加载了 Scratchpad,将 Environment 上下文更改为“Browser”,并验证了我定义的对象是否存在alert(typeof(MyExtension))
,它按预期返回“object”。当我尝试alert(typeof(MyExtension.Main))
时,我得到“未定义”。事实上,我得到“未定义”的alert(typeof(MyExtension.Main.*))
.
当我尝试检查其他两个文件(hello.js 和 awesome.js)中对象的类型时,它们被正确识别(即“函数”、“对象”等)。似乎 main.js 文件由于某种原因被忽略了。这就是我的 .xul 文件的定义方式:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://myextension/skin/myextension.css" type="text/css"?>
<overlay id="AwesomeOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://myextension/content/jquery.min.js" />
<script type="application/x-javascript" src="chrome://myextension/content/main.js" />
<script type="application/x-javascript" src="chrome://myextension/content/hello.js" />
<script type="application/x-javascript" src="chrome://myextension/content/awesome.js" />
<statusbar id="status-bar">
<statusbarpanel id="myextensionAwesomeStatusBar" context="myextensionSB" class="shown" persist="class">
<hbox id="myextensionHbox" class="shown" persist="class">
<image id="awesomeIcon" tooltiptext="Awesome Extension \m/" class="shown" persist="class" />
</hbox>
</statusbarpanel>
</statusbar>
</overlay>
我已经验证 chrome.manifest 中的路径是正确的。这让我发疯,请帮助!