Greasemonkey: دعم وقت تشغيل البرنامج النصي لبدء المستند

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

دعم document-start مقابل @run-at .

راجع # 2483 لمزيد من التفاصيل. قد يكون هذا "مستحيلا".

ال 17 كومينتر

يمكنك استخدام run_at ملك لل content_scripts اضح المفتاح.

لقد شاركت معك الشفقة على Chrome منذ 4 سنوات. الآن مرة أخرى لفايرفوكس. 😭

أرغب في إعادة صياغة اقتراحي في https://bugs.chromium.org/p/chromium/issues/detail؟id=257956

يجب على tabs.insertCSS / executeScript إدراج CSS / JS حتى يتم تعيين عنوان URL لعلامة التبويب على أنه غير فارغ (ليس فارغًا ، وليس غير محدد ، وليس سلسلة فارغة "") ، ويتم إلغاؤه إذا تمت إزالة علامة التبويب / تغييرها

يجب تحسين WebExtension APIs.

iology لماذا قمت بالتصويت ضد اقتراحي؟ إنه صالح تمامًا. بالإضافة إلى ذلك ، يمكن للمرء فقط استخدام البرنامج النصي للمحتوى لإدراج علامات البرنامج النصي في المستند الذي يحتوي على البرامج النصية للمستخدم.

يجب أن يشرح ما يلي كيفية القيام بذلك باستخدام أسلوبي: (يجب أن يعمل بشكل موثوق)

/**
 * <strong i="8">@typedef</strong> UserScript
 * <strong i="9">@property</strong> {Object} header The parsed header of a script
 * <strong i="10">@property</strong> {String} script The raw script data
 * <strong i="11">@property</strong> {String} type The script media type (in case a script is WebAssembly
 *                         or something other than JavaScript)
 */

/** The load state of this script. Used by the `matches()` function */
const READY_STATE = document.readyState;

(async () => {
    (await (browser.storage.local.get({scripts: []}) // Excuse this horrible code style
        .then(ret => ret.scripts)))                  // of combining `await` and `.then()`
        .forEach(/* <strong i="12">@param</strong> {UserScript} script */ script => {
            if (matches(script.header)) {
                let scriptTag = document.createElement("script");
                scriptTag.setAttribute("type", script.type)
                scriptTag.textContent = script.script;
                document.appendChild(scriptTag);
            }
        });
})();

/**
 * Checks if this script matches this page and @run-at property.
 * 
 * <strong i="13">@param</strong> {Object} scriptHeader The parsed header of a script
 * <strong i="14">@return</strong> {boolean} `true` if this page matches, `false` otherwise
 */
function matches(scriptHeader) {
    // Uses window.location and READY_STATE.
    // TODO: Implement
}

@ ExE-Boss بحلول الوقت الذي تقوم فيه باسترداد البرامج النصية من تخزين الامتداد ، يكون جزء من الصفحة قد تم تحميله بالفعل.

أنا على علم بذلك ، لكنني لا أرى طريقة أخرى للقيام بذلك بسبب حقيقة أن WebExtensions غير متزامن بطبيعته.

@ ExE-Boss ، هناك bugzilla ، https://bugzilla.mozilla.org/show_bug.cgi؟id=1332273 ، يبدو أنه يتقدم بشكل جيد ويجب أن يساعد في حل مشكلة @ document-start. لست متأكدًا مما إذا كانت ستهبط من أجل FF57.

أنا على علم بذلك ، لكنني لا أرى طريقة أخرى للقيام بذلك بسبب حقيقة أن WebExtensions غير متزامن بطبيعته.

@ ExE-Boss هذه حرفياً هي المشكلة التي نحاول حلها.

أحاول حلها أيضًا ، لكن الحل الذي قدمته لا يعمل إلا بشكل جيد فقط مع # 2525 ، لأنه بحلول هذه المرحلة تكون الصفحة بأكملها قد تم تحميلها بالكامل.

يحتوي Violentmonkey على هذه المشكلة أيضًا ، ولست متأكدًا من السحر الأسود الذي يستخدمه Tampermonkey ، ولكنه قادر على حقن البرنامج النصي بشكل موثوق على document-start الحقيقي.

Tampermonkey 2.9 والإصدارات الأقدم كانت GPL-3.0 وتم نشرها على GitHub . لقد حاولت النظر في الأمر ، واعتقدت في البداية أنه يستخدم مزامنة XHR ، ولكن بعد النظر فيه قليلاً ، ليس لدي أي فكرة عن كيفية تحقيق ذلك ، ولكنه يفعل ذلك بطريقة ما لأنه تمت إضافة دعم لذلك

انظر هنا لماذا تم إغلاق تامبرمونيكي المصدر:

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

Sxderp هذا فقط لمتصفح فايرفوكس 57 ، ربما لا يزال من الممكن حل هذا الخطأ في 58+.

لمعلوماتك ، Tampermonkey غير موثوق به عند بدء المستند أيضًا. هناك خيار حقن "فوري" (وهو أمر مخادع للغاية) يعمل على تسريع الأمور ، ولكن في الصفحات البسيطة مثل xkcd.com ، ما زلت أتلقى وميضًا قبل تحميل CSS (والذي يتم حقنه دائمًا عند بدء المستند). أحصل أيضًا على وميض من حين لآخر على مواقع أخرى.

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

لكننا نعلم أنه حل غير كامل ، ونريد حلاً مثاليًا.

إذا تم العثور على طريقة لإنجاز هذا العمل ، فهل يمكن أن تكون هناك طريقة لقراءة البرنامج النصي على الأقل مجموعة فرعية من خيارات التكوين الخاصة به بشكل متزامن؟ كمثال على نوع المشكلات التي يمكن أن يحلها هذا ، راجع https://github.com/ccd0/4chan-x/issues/1627. أحتاج هنا إلى تعطيل بعض التعليمات البرمجية على الصفحة ، لكنني أرغب أيضًا في الحصول على خيار عدم تعطيل الرمز. ويقوم العديد من المستخدمين بمسح localStorage في نهاية كل جلسة متصفح.

إذا تم العثور على طريقة لإنجاز هذا العمل ، فهل يمكن أن تكون هناك طريقة لقراءة البرنامج النصي على الأقل مجموعة فرعية من خيارات التكوين الخاصة به بشكل متزامن؟

ليس على المدى القصير. لا توجد طريقة للتواصل مع تخزين القيمة (الحصول على | ضبط) بطريقة متزامنة. ربما يكون هناك نوع من الحقن من جانب GM حيث يتم حقن المتغيرات بقيم التكوين في النطاق العالمي للنص. هذا أفضل ما يمكنني التفكير فيه ، وهذا ليس لطيفًا جدًا.

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

من المفترض أنه سيكون جزءًا من الكائن GM . شيء من هذا القبيل GM.initValues.yourVariable .

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