Greasemonkey: التوافق مع WebExtension

تم إنشاؤها على ١٦ سبتمبر ٢٠١٥  ·  36تعليقات  ·  مصدر: greasemonkey/greasemonkey

مع ظهور WebExtensions في العام المقبل وإيقاف XUL / XPCOM في النهاية ، قد يكون من الجيد القيام ببعض الأعمال لتقييد استخدام واجهات برمجة التطبيقات منخفضة المستوى في الأماكن التي يكون ذلك ضروريًا فيها.

أعتقد أن الخطوات التالية قد تكون مفيدة:

  • تحويل النوافذ المنبثقة greasemonkey إلى علامات تبويب باستخدام html
  • تغيير بدء التشغيل إلى ملحق bootstrap / إعادة التشغيل بدلاً من تراكب XUL
  • ثم قم بالتغيير إلى SDK main.js الذي يستدعي JSM الحالي فقط. تمامًا مثل غلاف رفيع حول كود الكشمير ، يمكن استخدام jpm للبناء والاختبار
  • استخدام وحدات SDK حيثما كان ذلك مفيدًا (مثل أزرار شريط الأدوات). يمكن لـ JSMs استيراد وحدات SDK النمطية

أعتقد أنه يمكن إنجاز معظم العمل بشكل تدريجي.

بمجرد أن يتم تقليل سطح واجهات برمجة التطبيقات "القديمة" إلى بعض الأجزاء الأساسية ، يمكننا حث رجال الموزيلا على توفير بدائل WebExtensions لهم.

التعليق الأكثر فائدة

لقد أحرزت بعض التقدم.

https://github.com/arantius/greasemonkey/tree/webbymonkey (في 88d53b4c67b7825858405eb2591f27c8487ce413)

أعيد تنفيذها من الصفر. تسجيل الخروج ، انتقل إلى about:debugging ، واضغط على "Load Temporary Add-on" وحدد أي ملف من موقع الجذر. يمكنك تثبيت برامج نصية للمستخدم وتشغيلها بالكاد. بالتأكيد لا توجد ميزات أخرى حتى الآن. (حسنًا ، هناك قائمة القرد ، لكنها مزيفة فارغة لا تفعل أي شيء إلى جانب أنها تبدو جيدة). لا يمكن ضمان أي من هذا هو "الطريق الصحيح" نحو المزيد من الميزات أم لا.

ال 36 كومينتر

لقد كنت أفكر في هذا حفنة. ليس لدي "قرار" واضح ، لكن هناك بعض النقاط:

  • لقد انتهينا من عملية النقل للتوافق مع e10s. كان الأمر أصعب بكثير عندما بدأنا ؛ على سبيل المثال ، Services.ppmm و .cpmm هي اختصارات لطيفة ، كان من الجيد الاعتماد عليها منذ البداية ، لكنها لم تكن موجودة عندما بدأنا (بشكل مسؤول).
  • كان هذا العمل طويلًا ومؤلماً للغاية ، ولا أتطلع إلى تكراره بشكل فعال.
  • لقد انخفض طرح e10s من Firefox 36 (اعتبارًا من سبتمبر 2014) إلى Firefox 42 (اعتبارًا من الآن ، سبتمبر 2015) ، أو تسعة أشهر على الأقل.
  • يقول الإعلان إن ملحقات الويب فقط هي على الأقل سنة أو سنتين ؛ سوف ينزلق إلى 2 ، 3 ، 4 سنوات من الآن؟
  • إذا كنا سنفعل هذا ، أعتقد أن هذا هو الوقت المناسب للقيام باستراحة نظيفة وإعادة الهندسة المعمارية.

    • أجد نفسي أتمنى أن يكون لدينا اختبارات وحدة جيدة في كثير من الأحيان ، على الرغم من أن لدينا الكثير من المشكلات التي لم يكتشفوها أبدًا ، فلدينا بعض المشكلات التي قد يواجهونها أيضًا.

    • يمكننا أخيرًا إضافة دعم Android؟

    • لا يتعين علينا في الواقع إعادة الكتابة من البداية ، ولكن التفكير في الكود الذي نحتفظ به والذي نسقطه قد يكون له ما يبرره.

  • أود حقًا أن تكون علاقة Greasemonkey / Mozilla أقوى بكثير قبل أن نبدأ مهمة أخرى بهذا الحجم. لدي فقط تخمينات ضعيفة حول كيفية تحويل ذلك إلى حقيقة.

    • أعتقد أننا بالفعل اختبار تعذيب للانتقال إلى شيء مثل تمديدات الويب اليوم ؛ على مر السنين ، أنشأنا عددًا قليلاً من الميزات المتقدمة. من المحتمل أن يساعد الاتصال ثنائي الاتجاه كجزء من الخطة كثيرًا.

سيكون البدء بمستند تصميم فكرة رائعة. نحتاج أساسًا إلى هندسة عكسية لكل Greasemonkey كما هو موجود في خطة بطريقة جيدة ، بدلاً من طريقة غير مخططة مزروعة عضوياً ، حتى يتم تنظيمها كلها.

على سبيل المثال ، Services.ppmm و .cpmm هي اختصارات لطيفة ، كان من الجيد الاعتماد عليها منذ البداية ، لكنها لم تكن موجودة عندما بدأنا (بشكل مسؤول).

أنا بالتأكيد لا أدافع عن استخدام WebExtensions حتى الآن ، فهي طريقة غير ناضجة لشيء مثل GM

لا يتعين علينا في الواقع إعادة الكتابة من البداية ، ولكن التفكير في الكود الذي نحتفظ به والذي نسقطه قد يكون له ما يبرره.

حسنًا ، لقد كنت أنظر إليها في الغالب من خلال تقنية POV. في الوقت الحالي ، تستخدم واجهة المستخدم تراكبات XUL وتنفيذ البرنامج النصي المباشر في بيئة الكروم المشتركة.

لذا فإن تحويل الأشياء إلى HTML وتشغيل كل شيء في سياق نافذة مستقل والتواصل فقط عبر تمرير الرسائل يبدو أنه الطريقة التي من المفترض أن تتم الأمور في المستقبل.

مدير الرسائل هو في الأساس أدنى مستوى حيث يتم تنفيذ ذلك. تستند التجريدات ذات المستوى الأعلى على ذلك. WebChannel.jsm / BroadcasstChannel / MessageChannel / WebExtension القنوات وما شابه.

سيكون البدء بمستند تصميم فكرة رائعة.

هل سيكون ويكي GH المكان المناسب لذلك؟ هل يتم إخطارات عند التعديل لجعل العمل التعاوني بسيطًا؟

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

إذا كنت مهتمًا بموضوع هذه المشكلة ، فيرجى قراءة:

https://groups.google.com/d/topic/greasemonkey-dev/K6IyDUWnTQc/discussion

شكرا!

https://developer.mozilla.org/en-US/docs/Web/API/File_and_Directory_Entries_API/ مقدمة

هذه واجهة برمجة تطبيقات مثيرة للاهتمام للغاية ، ولكن "هذه الميزة غير قياسية وليست على مسار المعايير" والتوافق محدود للغاية.

كانت كل محاولاتي الأخيرة (انظر # 2483 ، # 2484) في تصميم Greasemonkey-under-WebExtensions كاملة الميزات محبطة. لقد بدأت في التفكير في أسلوب تطوير أكثر تقدمًا: اختر مجموعة محدودة من الميزات وادعم ذلك فقط. كن مفيدًا بعض الشيء ، ثم نأمل أن تجد طريقًا نحو المزيد من الوظائف لاحقًا.

عند فحص تثبيت 3.x الخاص بي ، أرى أن كل برنامج نصي (بالنسبة لي) هو <strong i="6">@grant</strong> none . من بين 27 ، ستة فقط يستخدمون @run-at document-start ، ومعظم هؤلاء سيعملون على الأقل برشاقة إلى حد ما إذا لم يكن ذلك مدعومًا. يتم استخدام الميزة @require بكثافة ، و @resource قليلًا.

لذلك يبدو أن هذا هدف لائق يجب أن تستهدفه أولاً: دعم البرامج النصية للمستخدم العادي في وضع <strong i="12">@grant</strong> none ، لا يوجد دعم لأي واجهات برمجة تطبيقات GM_ . دعم @require . نأمل في دعم @resource بطريقة ما ، ربما بشكل غير فعال.

(ملاحظة جانبية ، لأنني أستمر في نسيانها : خطط لاستخدام @require في الاعتبار.)

نحصل على إمكانية الوصول إلى واجهات برمجة تطبيقات الويب العادية بالإضافة إلى واجهات WebExtension ، لذلك:

https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API

؟ ما هو حد التخزين لـ IndexedDB ، لـ WebExtension؟ يبدو أن هذا خيار أفضل بكثير من storage.local . الواجهة ليست الأبسط ، لكنها تمنحنا مزيدًا من القوة لفصل البرامج النصية عن بعضها البعض والقيام بقراءات انتقائية. أظن. كما أن المستندات ليست أسهل استخدامًا.

https://github.com/mdn/webextensions-examples/pull/171 يبدو أنه يحتوي على مناقشة قيمة ومثال على IndexedDB

لقد أحرزت بعض التقدم.

https://github.com/arantius/greasemonkey/tree/webbymonkey (في 88d53b4c67b7825858405eb2591f27c8487ce413)

أعيد تنفيذها من الصفر. تسجيل الخروج ، انتقل إلى about:debugging ، واضغط على "Load Temporary Add-on" وحدد أي ملف من موقع الجذر. يمكنك تثبيت برامج نصية للمستخدم وتشغيلها بالكاد. بالتأكيد لا توجد ميزات أخرى حتى الآن. (حسنًا ، هناك قائمة القرد ، لكنها مزيفة فارغة لا تفعل أي شيء إلى جانب أنها تبدو جيدة). لا يمكن ضمان أي من هذا هو "الطريق الصحيح" نحو المزيد من الميزات أم لا.

نظرًا لأن الإصدارات القديمة من Tampermonkey ، بالإضافة إلى Violentmonkey ، مفتوحة المصدر ، فهل يمكن استخدام بعض هذه التعليمات البرمجية هنا ، نظرًا لأن WebExtensions يشبه ملحقات Chromium؟
تحرير: في الواقع ، بالنظر إلى ذلك ، لست متأكدًا من توافق الترخيص مع Tampermonkey القديم. لكن Violentmonkey حاصل على ترخيص من معهد ماساتشوستس للتكنولوجيا ، لذا فهو متوافق.

PorygonZRocks : تحول Violentmonkey إلى Greasemonkey؟

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

من الجدير بالذكر أن FF56 قام بتعطيل كافة الوظائف الإضافية المتوافقة مع العمليات غير المتعددة ، لذا قد يلزم تغيير الموعد النهائي.

انظر فرع التطوير الخاص بي. وهو أمر خشن للغاية ولكنه يعمل بالحد الأدنى. يتم القيام بذلك ، لا يوجد شيء لتتبعه على وجه التحديد في هذه المشكلة واسعة النطاق.

arantius بدافع الفضول ، هل تكتب رمزًا جديدًا أو

هل تحتاج مساعدة؟

مرة أخرى بدافع الفضول ، على سبيل المثال ، هل الغرض من "parse-meta-line.js" هو مجرد تحليل البيانات الوصفية إلى كائن؟

arantius بدافع الفضول ، هل تكتب رمزًا جديدًا أو

في الغالب جديدة. النسخ عندما / حيث يكون مفيدًا. (حتى الآن ، يعد تحليل البرنامج النصي مثالًا كبيرًا.)

هل تحتاج مساعدة؟

ستكون المساعدة لطيفة. سيكون التنسيق صعبًا.

مرة أخرى بدافع الفضول ، على سبيل المثال ، هل الغرض من "parse-meta-line.js" هو مجرد تحليل البيانات الوصفية إلى كائن؟

سطر واحد منه ، نعم.

سطر واحد منه ، نعم.
قصدت ، هل يفعل أي شيء آخر باستثناء تحليل البيانات الوصفية بين هذه:

// ==UserScript==
....
// ==/UserScript==

يبدو أن هناك الكثير من التعليمات البرمجية إذا كان هذا هو الهدف الوحيد.

نعم هذا ما يفعله. تم إنشاؤه رمز. يرجى أخذ هذه المناقشة إلى https://groups.google.com/d/topic/greasemonkey-dev .

لا أستخدم مجموعات Google :(
لو كنت أنا ... ربما كنت سأفعل ذلك بشكل مختلف.

مجموعة جوجل لم تعد موجودة.

لست متأكدًا تمامًا مما إذا كان هذا هو الموقع الصحيح لها ، ولكن هنا على أي حال. إذا كنت تريد مني فتح إصدار منفصل arantius ، بالتأكيد.
أليس من المفترض أن يقوم الإصدار 4.0.0 بترحيل البرامج النصية الموجودة؟ لقد قمت بالتحديث إلى alpha 3 (قادم من أحدث إصدار غير تجريبي) ولاحظت أنه لم يعد لدي أي نصوص برمجية بعد الآن.

Phyxion ، إذا قمت بتثبيت 3.14 ، فيجب ترحيل البرامج النصية. تأكد من إعادة تشغيل المتصفح بعد التثبيت.

بعد ذلك عند تثبيت 4.x يجب أن يكون لديك البرامج النصية. إذا لم تقم بذلك ، فستكون بعض خطوات إعادة الإنتاج التفصيلية في إصدار جديد مفيدة.

Greasemonkey 4 alpha غير متوافق مع Firefox 57.

erkinalp ، هل يمكنك التفصيل؟ لقد كنت أستخدم 4alpha2 في الكثير من الاختبارات والتعديلات ، وهو يعمل ، على الرغم من عدم توفر جميع الميزات في 3.x. لم أقم بسحب التغييرات في 4alpha3 ، لذلك لا أعرف أن الالتزامات القليلة لهذا الإصدار تؤدي إلى كسر أي شيء.

Sxderp حسنًا ، إعادة إنتاجه على جهازي أمر سهل. لدي 3.14 مثبتة مع 10 برامج نصية للمستخدم. انتقل إلى AMO وقم بتنزيل أحدث إصدار من الإصدار alpha. أعد التشغيل عندما يُطلب منك ذلك. ثم تقول فقط أنه لا توجد نصوص مستخدم مثبتة. لست متأكدًا من مدى فائدة هذا لإعادة إنتاجه.

لم أختبر هذا بعد ، لكنني أعتقد أن GM4 يجب أن يفقد تكوينه بعد إلغاء التثبيت ، بينما يجب أن يحتفظ به GM3 ، لذلك أقترح عليك محاولة:

  1. قم بإلغاء تثبيت Greasemonkey تمامًا
  2. أعد تشغيل Firefox
  3. تثبيت Greasemonkey 3.14 (بما في ذلك إعادة التشغيل)
  4. أعد تشغيل Firefox كإجراء جيد
  5. تثبيت Greasemonkey 4 (نقطة أي شيء)

هل هذا يساعد؟

أعتقد أن المستوى الأعلى الذي ينتظره - أي تغليف كل شيء في وظيفة غير متزامنة - ليس اختيارًا جيدًا للتصميم لأنه يقيد عمليات التنفيذ المستقبلية (على سبيل المثال ، إذا / عندما نستعيد صناديق الحماية أو عوالم المستقبل es). إنه يجعل الأمور غير متسقة مع تنفيذ Vanilla JS حيث لا يتوفر انتظار المستوى الأعلى ويتم تنفيذ البرامج النصية ... حسنًا ... على مستوى أعلى.

تضمين التغريدة
لا يوجد شيء هنا :(
راجع للشغل ، من المفترض أن يظهر 4.0 بالشكل التالي: https://i.imgur.com/CPuWWKM.png
لا توجد أزرار أو أي شيء لإضافة نص.

... التفاف كل شيء في وظيفة غير متزامن ...

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

نعم ، كان الأمر في الغالب حول عدم التزامن / الانتظار ، نظرًا لأن هذا غير مسموح به حاليًا

arantius لماذا التصويت لأسفل؟

arantius علق على 2017. szept.

... التفاف كل شيء في وظيفة غير متزامن ...

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

حاول حذف محتوى [ملف تعريف mozilla] \ storage \ default \ (بعد النسخ الاحتياطي)
ثم أعد المحاولة.

عند الحديث عن كائنات UserScript ، فأنا لا أفهم تمامًا قرار التصميم لامتلاك ثلاث فئات من UserScript. في الوقت الحالي لديهم شجرة ميراث فردية سخيفة بعض الشيء.

علاوة على ذلك ، يتم استخدام RemoteUserScript مرة واحدة فقط ولهذا تم إنشاؤه فقط من أجل الحصول على المعرف . ولا يتم استخدام RunnableUserScript بشكل مباشر مطلقًا.

فقط لمزيد من المعلومات ...

أنا على FF57.0a1 وأقوم بتشغيل الإضافات القديمة و GM 3.13
للأسف ، لا أحصل على التحديثات (3.14 ، 3.15) حيث تم ضبط الإصدار الأقصى على 56. *

يمكن تثبيته يدويًا على الرغم من ..

لا يزال GM 3.16 يعلق المتصفح عند بدء التشغيل (أعتقد أنه يقوم بتحديث قاعدة البيانات)

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات