Greasemonkey: السماح بتثبيت الملفات المحلية

تم إنشاؤها على ١٢ أكتوبر ٢٠١٧  ·  44تعليقات  ·  مصدر: greasemonkey/greasemonkey

في الماضي ، كان بإمكانك ملف> فتح .user.js وسيتم تثبيته. في 4.0 حتى الآن ، لا يفعل شيئًا ، فقط يفتح الملف.

ال 44 كومينتر

ربما هذا (مطابقة مستندات النمط)؟ باستخدام * في محدد التطابقات للمخطط فقط globs إلى http أو https. اقترح إضافة تطابق إضافي مقابل file:// .

هذا أو المحدد <all_urls> .

تؤدي إضافة نمط المطابقة لاكتشاف البرامج النصية لـ file:/// فقط إلى بدء XHR الذي يفشل في قراءة المحتويات على عنوان URL هذا ، وهو أمر يثير الدهشة.

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

بدءًا من Gecko 1.9 ، يُسمح للملفات بقراءة ملفات أخرى معينة فقط. على وجه التحديد ، يمكن للملف قراءة ملف آخر فقط إذا كان الدليل الأصلي للملف الأصلي هو دليل أصل للملف الهدف.

قد يكون من المفيد ذكر تقرير خطأ للسماح بوصول نظام الملفات إلى المسارات المحددة في البيان باستخدام البروتوكول file:// .

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

يمكننا محاولة إيجاد حل بديل مثل التعامل المباشر مع السحب / الإفلات ، أو (LOL) قراءة محتوى علامة التبويب المفتوحة بالفعل. ولكن بعد ذلك ، سنفشل في جلب رمز / مورد / يتطلب نسبيًا ، لذلك لن يستمر ، بدون المزيد من الحلول.

هل تعذر عليك استخدام storage.local لتخزين المحتوى مؤقتًا باستخدام عنوان url كمفتاح قبل التنقل في صفحة التثبيت ؟ لديك بالفعل المحتوى في متغير. بالطبع يجب مسح ذاكرة التخزين المؤقت بمجرد التثبيت / عدم التثبيت بالتأكيد. سيكون أكثر ملاءمة إذا كان WebExtensions يحتوي على نوع من التخزين المؤقت حتى لا يضطروا للتعامل يدويًا مع الإخلاء.

لقد كنت العبث بما قلته ولم يكن الأمر مباشرًا كما كنت أعتقد. أولاً ، يتمتع أي برنامج نصي للمستخدم بإمكانية الوصول إلى browser.storage.local لذا فهو بطبيعته تخزين غير آمن للوظائف الإضافية مثل Greasemonkey. ثانيًا ، ينطبق الأمر نفسه على إرسال المحتوى من خلال رسالة إلى برنامج نصي في الخلفية. لست متأكدًا حقًا من كيفية تأمين ذلك لضمان إرسال الرسالة فقط من script-detect.js . وبسبب الطبيعة غير المتزامنة للبرامج النصية ، لست متأكدًا تمامًا مما إذا كان script-detect.js يتم تشغيله قبل البرامج النصية للمستخدم (سأقوم ببعض الاختبارات على ذلك).

وبالطبع ، ما لم أكن مخطئًا ، لا تتلقى البرامج النصية الخلفية أي إشارات إلى DOM / المحتوى في أي من مستمعي التنقل؟

تبين أنه يمكنك الحصول على محتوى الصفحة باستخدام onBeforeRequest مع تطابق على ['*://*/*.user.js'] ثم إنشاء StreamFilter . لقد نفذت بعض الكود لاختبار هذا في الفرع الذي نشرته مؤخرًا ، ولا يوجد طلب سحب في الوقت الحالي لأنه لا _ إصلاح_ أي شيء. ومع ذلك ، فإنه يتجنب المخاوف الأمنية التي أثارتها في رسالتي السابقة.

لسوء الحظ ، فإنه لا يحل مشكلة الملف التي تمت مناقشتها. بعض تذاكر bugzilla عليها:
https://bugzilla.mozilla.org/show_bug.cgi؟id=1341341
https://bugzilla.mozilla.org/show_bug.cgi؟id=1266960

تم توجيهي إلى هنا من # 2671

إذا كان هذا الموضوع يتعلق بالاستيراد من ملف محلي .... ثم ...
لماذا تستخدم XHR لقراءة الملف المحلي؟ يتسبب في كل أنواع التعقيدات مع الأصول والأذونات.
الطريقة السهلة هي استخدام new FileReader() من نتيجة input type="file"

إذا كان هذا الموضوع يتعلق بالتعرف على عناوين URL file:///.....user.js كنصوص وتثبيتها ، فهذه هي المشكلة المختلفة والحل المختلف.

الطريقة السهلة هي استخدام FileReader () الجديد من نتيجة نوع الإدخال = "ملف"

آه ، هذا يمكن أن ينجح. إنها ليست رشيقة مثل التنقل إلى مسار file:// وجعل الامتداد يفعل كل شيء من أجلك ، ولكنه قد ينجح. يمكن أن تظل غالبية سير العمل كما هي.

import script -> script selected -> contents cached in backend -> install dialog prompt -> retrieve content from backend -> continue install as usual

وهو أكثر أمانًا من الأساليب التي كنت أحاول استخدامها عند محاولة الحفاظ على سير عمل التنقل.

تم العثور على مثال على امتداد ويب يعمل باستخدام "نوع الإدخال =" ملف "". يبدو أنه لا توجد حاجة للتخزين المؤقت ، يمكن استيرادها مباشرة:
https://github.com/mdn/webextensions-examples/pull/171/files/6c066cfff4e8c662984f704cb17c8b39211ed062#diff -098de1750b345156f3cfd46f8199aa34

يبدو أنه لا توجد حاجة إلى ذاكرة التخزين المؤقت ، يمكن استيرادها مباشرة

لا يعني ذلك أن ذاكرة التخزين المؤقت "ضرورية" ، بل هي إجراء أمان. تمامًا كما هو الحال عند الانتقال إلى ملف .user.js ، ينبثق مربع الحوار لإخبارك ببعض المعلومات حول البرنامج النصي. أعتقد أن الأمر نفسه يجب أن يحدث عند إجراء الاستيراد. لذلك تحتاج إلى تخزين محتويات البرنامج النصي ، في مكان ما ليس في قاعدة البيانات العادية ، بحيث إذا نقر المستخدم على زر التثبيت ، فستظل متاحًا ولا تحتاج إلى مطالبة المستخدم مرة أخرى.

سواء تم تخزين ذلك مؤقتًا باستخدام واجهة برمجة تطبيقات تخزين أو فقط في كائن عام في مكان ما لا يهم بشكل خاص لسير العمل.

أود أيضًا أن أقول إن ميزة الاستيراد يجب أن تصبح أولوية قصوى [1] لأنها ستساعد الأشخاص الذين لديهم مشكلات في الترحيل. يمكنهم فقط استيراد الملفات من 3.x.

[1] سأبحث في الأمر إذا كان لدى

لدي استيراد. / تصدير في عدد من الملحقات الخاصة بي إذا كانت هناك حاجة إلى أمثلة.

بدأ المستخدم في الاستيراد ، لذا ليست هناك حاجة لمزيد من الاحتياطات / النوافذ المنبثقة / الإخطارات / التحذيرات.

أضف زر استيراد (إدخال ملف) إلى أحد الحوارات
بمجرد نقر المستخدم عليه ، يفتح منتقي الملفات .. حدد المستخدم الملف المطلوب وانقر فوق فتح (كل HTTML5 المدمج)
يتم قراءة الملف وتحليله
إذا كان يتوافق مع برنامج USER Script ، فسيتم إضافته بعد ذلك إلى IDB
ثم قم بتحديث المستمعين قيد التشغيل

هذا كل شيء....

أفعل الشيء نفسه في تفضيلات الاستيراد / التصدير ، وبيانات النسق (حتى 500 كيلوبايت) والعديد من الوظائف الإضافية مع وظيفة الاستيراد / التصدير.

أود أيضًا أن أقول إن ميزة الاستيراد يجب أن تكون ذات أولوية قصوى [1]

في الواقع ... يمكّن ذلك كتّاب البرامج النصية من كتابة نصوص جديدة واستيرادها للتشغيل أو الاختبار ، وفي حالة ترقية GM3 -> 4 ، أضف البرامج النصية المفقودة.

الشفرة والوظيفة بسيطة للغاية ... بضعة أسطر من التعليمات البرمجية يمكن إجراؤها في غضون ساعات.
يمكنك استخدام الكود الخاص بي كقاعدة إذا كنت ترغب في ذلك.

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

لست متأكدًا من هذا بالرغم من ذلك. لا أحب بشكل خاص تخطي مربع حوار التثبيت القياسي. ربما يستطيع arantius أن يعطي نظرة ثاقبة عما يود رؤيته في الملحق.

لست متأكدًا من هذا بالرغم من ذلك. لا أحب بشكل خاص تخطي مربع حوار التثبيت القياسي.

يُستخدم الحوار القياسي عندما يواجه المستخدم نصًا برمجيًا للمستخدم من مصدر بعيد. ثم هناك حاجة إلى حوار تأكيد.

في حالة قيام المستخدم ببدء الاستيراد:

  • يقرر المستخدم استيراد نص
  • ينقر المستخدم على زر الاستيراد
  • ينتقل المستخدم إلى البرنامج النصي المحدد من قبل المستخدم
  • هل هناك حاجة لسؤال المستخدم مرة أخرى من خلال حوار "هل تريد حقًا تثبيت هذا البرنامج النصي؟" :)
    يبدو ذلك مزعجًا. على الرغم من ذلك ، من الضروري التحذير في حالة وجود أخطاء.
  • ينتقل المستخدم إلى البرنامج النصي المحدد من قبل المستخدم

لكن ليست هذه هي الطريقة التي تسير بها الأمور ... يتم التثبيت عن طريق رد الاتصال (المشغل على * .user.js) ...

لكن ليست هذه هي الطريقة التي تسير بها الأمور ... يتم التثبيت عن طريق رد الاتصال (المشغل على * .user.js) ...

حاليا نعم. لكن من الممكن إضافة زر استيراد للملفات المحلية. ولا تقم بالتثبيت على الملاحة مقابل file:// .

آه ، حسنًا ، بالنسبة للملفات المحلية ، هذا مناسب تمامًا. ليس للملفات البعيدة! ؛-)

لكن ليست هذه هي الطريقة التي تسير بها الأمور ... يتم التثبيت عن طريق رد الاتصال (المشغل على * .user.js) ...

كما ذكرنا ، نحن نتحدث عن الاستيراد اليدوي باستخدام إدخال الملف

نعم حصلت عليها. هذا جيد بالنسبة لي بالنسبة للملفات المحلية (انظر أعلاه) ...

أعتقد أنه من الممكن فقط سحب وإسقاط ملف .user.js في نافذة Greasemonkey لتحميل كود البرنامج النصي فيه؟
نظرًا لأن هذا يعمل بالتأكيد مع Firefox نفسه (على سبيل المثال ، يمكنني تحميل ملف إلى موقع الويب ، مثل imgur أو megaupload عن طريق إسقاطه)

هل هناك طريقة (حتى وإن كانت خرقاء وغير قابلة للسحب والإفلات) تسمح لي باستيراد البرامج النصية المحلية لـ GM؟

في أي دليل "ذاكرة تخزين مؤقت" يجب وضع البرامج النصية أخيرًا؟ لقد وجدت العديد من ملفات "ذاكرة التخزين المؤقت" في ملف تعريف Firefox

أعتقد أنه من الممكن فقط سحب وإسقاط ملف .user.js في نافذة Greasemonkey لتحميل كود البرنامج النصي فيه؟

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

قامت Mozilla بتحديث المستند (ملخص للأمثلة أعلاه):
https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Working_with_files

  1. افتح الملفات بامتداد باستخدام منتقي الملفات
  2. افتح الملفات بامتداد باستخدام السحب والإفلات

مع تنفيذ هذا ، سيكون لدينا نفس السلوك كما في GM3.

إذن ، هل هناك أي اقتراحات محتملة لتثبيت برنامج نصي يدويًا لم يتم تقديمه في نموذج مناسب عبر الإنترنت؟

Samizdata حاليًا أسهل طريقة هي الحصول على إصدار تجريبي من GM (https://addons.mozilla.org/en-US/firefox/addon/greasemonkey/versions/beta) ، افتح قائمة القرد -> نص جديد.

إذا كان لديك نصوص تتطلب @ تتطلب ملفات محلية ، فيمكنك القيام بذلك بالطريقة الصعبة فقط. على سبيل المثال ، احصل على Proxomitron (http://www.proxomitron.info/files/) ، وقم بتشغيله ، وقم بتكوين FF لاستخدام الوكيل 127.0.0.1:8080 ، ضع ملفاتك في مجلد Proxomitron HTML وقم بالوصول إليها بعد ذلك داخل FF باستخدام " http: //bweb..local.ptron/YOURFILE.user.js ".

kekkc ، أعتقد أنه تم دفع إصدار جديد به مشكلة المورد البعيد إلى AMO.

هتافات. لقد تم ذلك ، kekkc !

kekkc ، أعتقد أنه تم دفع إصدار جديد به مشكلة المورد البعيد إلى AMO.
ليس بعد .. بقدر ما أستطيع أن أرى

Sxderp هل نشير إلى # 2707؟

Eselce ، نعم. هذا _should_ يحل المشكلات الموجودة عند إنشاء برنامج نصي جديد باستخدام الزر "نص برمجي جديد" ثم تطبيق علامة @require على البرنامج النصي.

للحصول على .user.js أو نص مطلوب يتم تقديمه محليًا ، هناك العديد من الاحتمالات. ولكن أسهل طريقة هي استخدام سطر واحد من لغة بايثون في سطر الأوامر:

  • بالنسبة لـ Python 2.x:
    python -m SimpleHTTPServer

  • بالنسبة إلى Python 3.x:
    python -m http.server

... الذي يبدأ فورًا في خدمة جميع الملفات في الدليل حيث تقوم بتشغيله ، على http://127.0.0.1:8000/

(_لاحظ أن 8000 هو المنفذ الافتراضي ؛ يمكنك تغيير ذلك ؛ انظر أدناه_)

هذه هي الطريقة التي أضع بها .user.js المحلي وأطلب الملفات في خادم http محلي. أفعل هذا من أجل Greasemonkey ولكن أيضًا من أجل Tampermonkey.

يتم تثبيت Python افتراضيًا في Linux و MacOs. إذا كنت ستستخدم Windows ولم تكن قد قمت بتثبيته وما زلت تخطط للاستمرار في تسمية نفسك بالمطور ، إذن ... _ بجدية ؟! ما خطبك؟ _ لديك مشاكل أكثر خطورة مما يمكن أن تبدأ في إدراكه! أود أن أقترح عليك البستنة: الشتلات: أو الحياكة كهوايات بدلاً من أجهزة الكمبيوتر: غمزة: (_هي ، مجرد مزاح! _)

ليست هناك حاجة لتثبيت أي برامج غريبة - أنت _ _ يمكن، ولكن هذا unnecessary_ _absolutely. بايثون ليست "تطبيقًا" ، إنها لغة برمجة أساسية. لكنك لا تحتاج حتى إلى "التحدث" بلغة بايثون للحصول على هذا الحل ، لذلك لا تتوقف أو تتسرع في استخدام أدوات الحياكة الخاصة بك حتى الآن!

إجراء تافه:

  1. cd في الدليل الذي يحتوي على .user.js و / أو الملفات المطلوبة. قل ، على سبيل المثال ، requiredFile1.js و requiredFile2.js

  2. من هذا الدليل: بالنسبة إلى Python 2.x ، قم بتشغيل

python -m SimpleHTTPServer

أو: بالنسبة لبرنامج Phython 3.x ، قم بتشغيل

python -m http.server

  1. تأكد من أن خطوطك @require هي كما يلي:
// <strong i="42">@require</strong>  http://127.0.0.1:8000/requiredFile1.js
// <strong i="43">@require</strong>  http://127.0.0.1:8000/requiredFile2.js

... حيث requiredFile1.js و requiredFile2.js هي الملفات المحلية المطلوبة التي تريد تقديمها.

  1. عندما يتم تشغيل البرنامج النصي greasemonkey الخاص بك ، فإنه سيلتقط بشكل صحيح المتطلبات ، والتي يتم تقديمها بواسطة Python.

منتهي.

لإغلاق خادمك المحلي ، ما عليك سوى الانتقال إلى وحدة التحكم حيث تقوم بتشغيل الأمر python والضغط على <Ctrl><C> .

أيضًا ، -_- وآمل أن يكون هذا واضحًا بشكل يبعث على السخرية لك _-- ، من فضلك لا تنس تشغيل سطر أوامر خادم Python HTTP قبل توقع أن يتمكن Greasemonkey أو Tampermonkey من العثور على الملفات ...

نصيحة : إذا كنت تريد استخدام منفذ غير المنفذ الافتراضي 8000 ، فاكتب ببساطة الرقم المطلوب (رقم منفذ صالح) في الأمر ، مثل هذا:

  • بالنسبة لـ Python 2.x:
    python -m SimpleHTTPServer 12345

  • بالنسبة إلى Python 3.x:
    python -m http.server 12345

... وبطبيعة الحال قم بتحديث عناوين url @require بهذا الرقم بدلاً من 8000.

حسنًا ، افترض أنني أنقر على رمز شريط أدوات GM وحدد "برنامج نصي للمستخدم الجديد ...."

تم تسمية علامة التبويب الجديدة المطابقة تلقائيًا باسم "برنامج نصي غير مسمى 821696"

ثم ألصق من ملف محلي رمز GM في جزء علامة التبويب وانقر فوق رمز "حفظ" في الجانب الأيسر العلوي.

أين أجد هذا النص لاحقًا؟ قراءة: كيف يمكن تعديل هذا النص لاحقًا؟

كيف يمكنني تغيير اسم البرنامج النصي إلى "foobar" على سبيل المثال؟

سيتم أخذ bsto Name منname النصي.
ستظهر جميع البرامج النصية الجديدة فوق "برنامج نصي للمستخدم الجديد ...".
لإزالة أو تعديل واحد ، انقر فوق عنوان البرنامج النصي ، وستكون هناك قائمة فرعية.

حسنا شكرا لك.

مجرد سؤال آخر:

في 25 نوفمبر ، أخبرنا المستخدم kekkc في مشاركته (انظر أعلاه) أن Mozilla قدمت طريقة لسحب الملفات وإفلاتها (من WinExplorer).

لذا يجب أن يكون سحب وإسقاط ملفات المستخدم ممكنًا الآن.

هل انا على حق؟

متى سيتم تنفيذه في GM (متاح لسحب وإسقاط ملفات * .user.js)؟

FWIW أعتقد أنه يمكننا / يجب علينا الكشف عن التنقل إلى file://.../anything.user.js ، وإرفاق إجراء صفحة يمكن أن يفتح واجهة مستخدم بأي نوع من أنواع مستعرض الملفات الذي يمكننا تنفيذه.

يمكننا اكتشاف أحداث التنقل ولكن لا نحصل على المحتوى (ربما في نص برمجي للمحتوى)

على الرغم من أنني أجد أنه من السخف الانتقال إلى file:// فقط لفتح متصفح الملفات (لا أعتقد أنه يمكننا فعل أي شيء بخلاف إدخال منتقي الملفات).

على الرغم من أنني أجد أنه من السخف الانتقال إلى ملف: // فقط لفتح مستعرض ملف (لا أعتقد أنه يمكننا فعل أي شيء بخلاف إدخال منتقي الملفات).

نعم بالضبط ، نحن مقيدون. لكن يمكننا اكتشاف النية وتقديم المساعدة قدر الإمكان في بيئتنا المحدودة.

2 سنتي ...

أعتقد أنه يمكننا / يجب علينا اكتشاف التنقل إلى الملف: //.../anything.user.js ،
يمكننا اكتشاف أحداث التنقل ولكن لا نحصل على المحتوى (ربما في نص برمجي للمحتوى)

كما ذكر Sxderp ، هذا ممكن ولكنه فوضوي بعض الشيء ...

  • أضف مستمعًا (مثل tabs.onUpdated.addListener لأنك ستحتاج إلى المحتوى على أي حال)
  • دع تحميل الصفحة يظهر البرنامج النصي
  • قم بإدخال النص البرمجي للمحتوى للحصول على محتوى الصفحة وتمريره إلى برنامج bg النصي
  • أغلق الصفحة / علامة التبويب

لبديل ....

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

شخصيًا ، إذا كنت أنا ، فسأختار عدم إضافة مستمعين إضافيين وببساطة تمت إضافة خيار الاستيراد إلى نافذة منبثقة للمتصفح

بالإضافة إلى ذلك ، لم أستخدم تنسيق .user.js منذ GM4 على أي حال وأعتقد أنه يمكن تركه في الخلف. ؛)

أنا شخصياً ، لو كنت أنا ، كنت سأختار عدم إضافة مستمعين إضافيين وببساطة ..

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

بالإضافة إلى ذلك ، لم أستخدم تنسيق .user.js منذ GM4 على أي حال وأعتقد أنه يمكن تركه في الخلف. ؛)

ماذا يعني هذا؟

ماذا يعني هذا؟

تطلب GM3 تسمية البرامج النصية على أنها abc.user.js حتى يمكن التعرف عليها على أنها برنامج نصي لـ GM.

في GM4 ، يتم حفظ البرامج النصية في IndexedDB ولا يهم اسم البرنامج النصي لأنه يحصل على الاسم من @name . لذلك كنت أقوم بإنشاء نصوصي وحفظها (على الكمبيوتر) كـ abc.js (بدون .user ) وقم بنسخها / لصقها في GM.

استيراد يدوي ، أتخيل أنه لن يلزم ربطه بتنسيق التسمية .user .

أي تقدم في هذا؟

يمكن لملحق FireMonkey القيام بذلك:

https://addons.mozilla.org/en-US/firefox/addon/firemonkey/

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