سؤال

لدي Addon أن كل 5 دقائق أو نحو ذلك يتحقق من تغذية RSS لمشاركة جديدة، وإذا كان هناك واحد، فسيعرض تنبيه (). المشكلة هي، أخشى أنه إذا فتح المستخدم عدة ويندوز، فذلك عندما يكون هناك منشور جديد بملايين التنبيهات سوف ينبثق أن نفس الشيء. هل هناك على أي حال للحصول على "عقل" واحد فقط يعمل في وقت واحد؟

شكرا مقدما!

هل كانت مفيدة؟

المحلول

ابحث عن شيء يسمى "وحدات التعليمات البرمجية المشتركة JavaScript" أو JSMS.

المستندات الأولية هنا:

https:/developer.mozilla.org/en/using_javascript_code_modules.

سيتم فتح ملف كل .j في Addon الخاص بك الذي يحتاج إلى الذاكرة المشتركة مع السطر التالي:

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

يتفتح السطر أعلاه [yourfilenameame] .jsm ويحمل لها تصديرها (انظر أدناه) وظائف ومتغيرات في com.myfirefoxaddon.shared كائن. سيشير كل مثيل من هذا الكائن الذي تم تحميله إلى نفس المثيل في الذاكرة.

لاحظ أنه إذا كنت ترغب في الحصول على أي أمل فيك، فعليك الإدخال، فستحتاج إلى كتابة جميع التعليمات البرمجية الخاصة بك في COM.MYFirefoxaddon. * اكتب كائن مثل الحمقى في AMO يمنع الموافقة على الإضافات التي لا تفعلها احترام مساحة الاسم العالمية

أكبر تحذير ل JSM هو أنك بحاجة إلى تصدير كل وظيفة يدويا التي تريد أن تكون متاحا لبقية الكود الخاص بك ... نظرا لأن JS لا يدعم الأشياء العامة / الخاصة الأشياء التي يضربني كنوع من الفقراء "العمومية" الدعم ... في أي حال، ستحتاج إلى إنشاء صفيف تصدير_symbols في مكان ما في ملف JSM الخاص بك واسم كل وظيفة أو كائن تريد تصديره، مثل هذا:

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"

]

نصائح أخرى

تحرير الوحدات النمطية ليست الحل المناسب لهذه المشكلة، نظرا لأن الرمز لا يزال سيتم استيراده في كل نافذة، وسيتم تشغيل المستمعين / أجهزة ضبط الوقت التي قمت بإعدادها في كل نافذة. يجب أن تكون حريصا على استخدام الوحدات النمطية لهذا - يجب إعداد جميع أجهزة ضبط الوقت / عمليات الاتصال في رمز الوحدة النمطية (لا تستخدم كائن المراقب المحدد في الوحدة النمطية) ويجب ألا تستخدم أي مراجع إلى النافذة في الوحدة النمطية وبعد

الطريقة الصحيحة للقيام بذلك انا افضل لكتابة مكون XPCom (JS). إنه معقد إلى حد ما، نعم وليس لدي رابط مفيد يشرح كيفية القيام بذلك. شيء واحد: ينفذه باستخدام XPComutils أسهل، ستقوم الأعماث القديمة بإلقاء الكثير من شفرة المرجعية عليك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top