Firefox无法识别已定义的对象(Firefox扩展开发)

时间:2013-03-25 20:15:17

标签: javascript firefox firefox-addon

我正在开发一个Firefox扩展程序(我是新手,所以请放轻松),我似乎陷入了一个非常烦人的问题,阻碍了我取得任何进展。

我有三个.js文件:main.jshello.jsawesome.js和一个.xul文件,awesomeOverlay.xulmain.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,将环境上下文更改为"浏览器",并验证我定义的对象是否由alert(typeof(MyExtension))存在,并返回" object"正如所料。当我尝试alert(typeof(MyExtension.Main))时,我得到了#34;未定义"。事实上,我得到了" undefined" 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中的路径是正确的。这让我疯了,请帮忙!

1 个答案:

答案 0 :(得分:0)

由于MyExtension.Main中定义了main.js,您可能需要尝试

exports.MyExtension = MyExtension;
main.js中的

,在分配MyExtension.Main之后的某个地方,

main = require("main");

在您调用typeof(MyExtension.Main)的文件中(因为属性Main已在main.js中定义)并以typeof(main.MyExtensions.Main)

的形式访问对象

这假设您的所有.js文件都在lib文件夹中。我不确定(如果)XUL如何影响这一点。我从未和XUL搞砸过;使用这种特殊技术,我不仅仅是一个新手。