4

5分ごとにRSSフィードで新しい投稿をチェックするアドオンがあり、ある場合はalert()が表示されます。問題は、ユーザーが複数のウィンドウを開いた場合、新しい投稿があると、同じことを示す何百万ものアラートがポップアップ表示されるのではないかと心配しています。とにかく、一度に1つの「頭脳」だけを実行することはありますか?

前もって感謝します!

4

2 に答える 2

4

「Javascript共有コードモジュール」またはJSMと呼ばれるものを検索します。

主なドキュメントは次のとおりです。

https://developer.mozilla.org/En/Using_JavaScript_code_modules

共有メモリを必要とするアドオン内の各.jsファイルは、次の行で開きます。

Components.utils.import("resource://xxxxxxxx/modules/[yourFilenameHere].jsm", com.myFirefoxAddon.shared);

上記の行は[yourFilenameHere].jsmを開き、エクスポートされた(以下を参照)関数と変数をcom.myFirefoxAddon.sharedオブジェクトにロードします。ロードされたそのオブジェクトの各インスタンスは、メモリ内の同じインスタンスを指します。

アドオンがモデレートを超えてしまうことを期待したい場合は、com.myFirefoxAddon。*タイプのオブジェクトにすべてのコードを記述する必要があります。これは、AMOのgoonsが、グローバルを尊重しないアドオンの承認を妨げているためです。名前空間

JSMの最大の注意点は、コードの残りの部分で使用できるようにする各関数を手動でエクスポートする必要があることです... JSはパブリック/プライベートタイプのものをサポートしていないため、これは一種の貧乏人のように私を襲います「パブリック」サポート...いずれの場合も、JSMファイルのどこかにEXPORTED_SYMBOLS配列を作成し、エクスポートする各関数またはオブジェクトに次のように名前を付ける必要があります。

var EXPORTED_SYMBOLS = [
    /* CONSTANTS */
    "SERVER_DEBUG",
    "SERVER_RELEASE",

    "LIST_COUNTRIES",
    "LIST_TERRITORIES_NOEX",

    /* GLOBAL VARIABLES */
    /* note: primitive type variables need to be stored in the globals object */
    "urlTable",
    "globals",

    /* INTERFACES */
    "iStrSet",

    /* FUNCTIONS */
    "globalStartup",

    /* OBJECTS */
    "thinger",
    "myObject"

]
于 2010-01-08T21:12:42.773 に答える
2

[編集]モジュールはこの問題の正しい解決策ではありません。コードは引き続きすべてのウィンドウにインポートされ、設定したリスナー/タイマーはすべてすべてのウィンドウで実行されるためです。 このためにモジュールを使用する場合は注意が必要です。すべてのタイマー/コールバックは(モジュールで定義されたオブザーバーオブジェクトを使用するだけでなく)モジュールコードで設定する必要があり、モジュール内のウィンドウへの参照を使用しないでください。 。

これを行う正しい方法は 、XPCOMコンポーネント(JSで)を作成することですそれはやや複雑です、はい、そして私はそれを行う方法を説明する便利なリンクを持っていません。1つ:XPCOMUtilsを使用して実装する方が簡単です。古いドキュメントでは、多くの定型コードがスローされます。

于 2010-01-08T23:54:41.687 に答える