0

私は Firefox 拡張機能を開発しています (私はこれに慣れていないので、簡単に行ってください)、非常に厄介な問題に悩まされているようで、進歩が妨げられているようです。

main.js、、、および .xul ファイルの3 つの .js ファイルがhello.jsあります。は次のようになります。awesome.jsawesomeOverlay.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!");
        }
    }
};

他の 2 つの .js ファイルには、 と のようなオブジェクトがMyExtension.Hello = {...}ありMyExtension.Awesome = {...}ます。問題は、stackoverflow.com をロードすると、コンソールにアラートやログが表示されないことです。Scratchpad をロードし、Environment コンテキストを「Browser」に変更し、定義したオブジェクトが によって存在するかどうかを確認したalert(typeof(MyExtension))ところ、期待どおりに「object」が返されました。を試してみるとalert(typeof(MyExtension.Main))、「未定義」になりました。実際、私は「未定義」を取得しalert(typeof(MyExtension.Main.*))ます。

他の2つのファイル(hello.jsとawesome.js)のオブジェクトのtypeofを調べてみたところ、正しく認識されています(つまり、「関数」、「オブジェクト」など)。何らかの理由で 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 のパスが正しいことを確認しました。これは私を狂わせています、助けてください!

4

1 に答える 1

0

MyExtension.Mainで定義されているのでmain.js、試してみてください。

exports.MyExtension = MyExtension;

in 、 whereが割り当てられmain.jsた後のどこか、およびMyExtension.Main

main = require("main");

呼び出し元のファイルで (typeof(MyExtension.Main)プロパティMainが で定義されているためmain.js)、次のようにオブジェクトにアクセスします。typeof(main.MyExtensions.Main)

これは、すべての .js ファイルがlibフォルダーにあることを前提としています。XUL がこれにどのように (もし) 影響するかはわかりません。XUL をいじったことは一度もありません。その特定のテクノロジーについては、あなたよりも初心者です。

于 2013-03-26T17:23:09.480 に答える