Greasemonkey: أضف GM.addStyle API لتصميم الصفحات المقيدة لـ CSP

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

النقص الحالي في أسلوب البرمجة هو في الواقع كارثة كاملة :-(

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

شكرا !

لكن هذا يجعل النقص الحالي غير مفهوم ...

ال 14 كومينتر

addStyle هو 12 سطرًا تافهًا من التعليمات البرمجية ، والتي يمكنك نسخها بسهولة في البرنامج النصي الخاص بك. أو حتى 11 ، لأن هذا الخط ليس ضروريًا:
style.setAttribute('type', 'text/css');

شكرا !

لكن هذا يجعل النقص الحالي غير مفهوم ...

arantius لدي مشكلة في محاولة تحميل أنماط المستخدم على الصفحات التي تحتوي على CSP ولا تسمح بـ "self" كأصل - لذلك لا يمكنني إضافة عنصر <style> . يمكن لشركة GM حل هذه المشكلة عن طريق كشف واجهة برمجة تطبيقات تستدعي tabs.insertCSS() ( المرجع ). أفكار؟

لدي مشكلة في محاولة تحميل أنماط المستخدم على الصفحات التي تحتوي على CSP ولا تسمح بـ "self" كأصل - لذا لا يمكنني إضافة

لقد قدمت خطأً ضد Stylish لأن هذا هو المكان الذي واجهت فيه المشكلة. ومع ذلك ، أعتقد أنه قد يكون من المفيد النظر هنا نظرًا لأن واجهات برمجة التطبيقات الحالية لجنرال موتورز تعرض في الغالب واجهات برمجة تطبيقات WebExt المتميزة التي تتحايل على بعض قيود البرنامج النصي للمحتوى أو غيرها ، و insertCSS هو واحد آخر من هؤلاء.

تم العثور على الخطأ Sxderp المشار إليه ( هذا أيضًا). عندما تهبط هذه ، ستكون اقتراحاتي هنا وعلى Stylish غير ضرورية.

لا أعرف بالضبط ما يعنيه "هذا يجب أن يعمل إذا قمت بتجميع CSS في الامتداد الخاص بك ..." ، في الخطأ المرتبط. قد لا يعمل الإدراج الديناميكي للعقدة.

سأعيد فتحه للنظر في الوظائف الآمنة لـ CSP. (ولكن مع أولوية منخفضة حقًا ...)

من حيث المبدأ ، يمكن أيضًا تنفيذ ذلك دون انتظار FF عن طريق تمرير رسالة إلى البرنامج النصي في الخلفية وتشغيل tabs.insertCSS . لكن القفز من خلال تلك الأطواق لن يكون ضروريًا بمجرد تنفيذ هذا الخطأ.

يقول arantius 1415352 "يجب أن ينطبق هذا على سمات HTML style ومحتويات عقد HTML <style> ."

في حالة عدم وجود خطة لإضافة GM.addStyle (وهو أمر جيد جدًا بالنسبة لي إذا تمت معالجة مشكلة CSP بطريقة أخرى) ، أقترح تعديل منشور المدونة هذا لتوضيح أنه ليس فقط "اعتبارًا من اليوم ، هناك لا يوجد دعم لـ [...] GM_addStyle "، ولكن لم يتم التخطيط لأي شيء في المستقبل أيضًا (وربما يشير إلى هذا البديل أيضًا). قد يبدو هذا واضحًا ، لكنه لم يكن مناسبًا لي (لولا أنني لم أجد هذه المشكلة ، فربما أنتظر إعادة تنفيذ الميزة بدلاً من إصلاح البرامج النصية الخاصة بي الآن).

شكرا!

بخصوص polyfill: منذ أن سمعت أن GM_addStyle كان على كتلة التقطيع ، استخدمت في الواقع 3 أوامر فقط لاستبدالها. بدلاً من اختبار HEAD ، أقوم فقط بإضافة النمط مباشرةً إلى عنصر المستند ، والذي يكون موجودًا دائمًا ، حتى في بداية المستند.

var style = document.createElement('style'); var style.textContent = `
<Stylesheet here>
`; document.documentElement.appendChild(style);

إليك إصدار الوظيفة الذي نادرًا ما أستخدمه ، والذي يعمل في 5 أسطر:

addStyle = function (css) {
  var style = document.createElement('style');
  style.textContent = css;
  document.documentElement.appendChild(style);
  return style; //optional, but convenient for changing the styling later.
};

لقد اختبرت هذا في GM 3 و 4 على Firefox ، و TamperMonkey على Chrome ، بدون مشكلة ، على الرغم من عدم كونه قياسيًا. وأنا أفضل أن يكون غير قياسي على أن يفشل إذا لم يتم تحميل HEAD بعد (وهو ما يحدث بشكل مفاجئ في كثير من الأحيان. لدي شكاوى.)

ألاحظ أيضًا أن UserStyles، org تستخدم طريقتى كبديل في نصوص المستخدمين التي تم إنشاؤها تلقائيًا.

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

في FF57 و GM4 ، لا يتوفر documentElement دائمًا في بداية المستند ، على الأقل على جهازي.

نظرًا لأن GM 4 (في الوقت الحالي) قد حدث بدء المستند حتى في وقت متأخر عن ذي قبل ، فأنا
لست متأكدا كيف هذا ممكن. ولكن إذا لم يكن المستند موجودًا ،
ثم لن يكون أيًا منهما عنصر HEAD ، نظرًا لأن عنصر المستند هو
عنصر HTML. وهو ما يحتوي على عنصر HEAD. لذا فإن طريقي ليس كذلك
أي أسوأ.

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

أتوقع بالتأكيد أن يكون عنصر المستند موجودًا في الوقت الذي يحدث فيه ذلك
يتم حقن أي محتوى نصي.

في الثلاثاء 26 ديسمبر 2017 الساعة 6:26 مساءً ، كتب CoolCmd [email protected] :

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

-
أنت تتلقى هذا لأنك علقت.
قم بالرد على هذا البريد الإلكتروني مباشرة ، وقم بعرضه على GitHub
https://github.com/greasemonkey/greasemonkey/issues/2724#issuecomment-354028964 ،
أو كتم الخيط
https://github.com/notifications/unsubscribe-auth/AFNSrmb5eKj-nY9vnR3d94bq5kIjaz9Tks5tEY7PgaJpZM4QnG03
.

لا أعتقد أنه يمكنك حتى إعداد مراقبي الطفرات.

يمكنك إرفاق مراقب الطفرة بـ document .

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