التعامل مع مخالفات الرموز المستضافة عن بُعد

أما الرمز المستضاف عن بُعد، أو RHC، فهو ما يطلق عليه سوق Chrome الإلكتروني أي شيء بواسطة المتصفح الذي تم تحميله من مكان آخر غير الملفات الخاصة بالامتداد. أشياء مثل JavaScript وWASM. لا تتضمن بيانات أو أشياء مثل JSON أو CSS.

لماذا لم يعُد RHC غير مسموح به؟

مع إضافات Manifest V3، يجب الآن تضمين جميع الرموز البرمجية التي تستخدمها في الداخل. الإضافة نفسها. في الماضي، كان بإمكانك إدخال علامات النصوص البرمجية ديناميكيًا من أي عنوان URL على الويب.

قيل لي أنّ الإضافة تحتوي على RHC. ما هي المشكلة؟

إذا تم رفض إضافتك أثناء المراجعة باستخدام خطأ آرغون أزرق، فحينئذٍ يعتقد المراجعون أن إضافتك تستخدم رمزًا مستضافًا عن بُعد. هذا هو عادةً ما تكون نتيجة محاولة إضافة لإضافة علامة نص برمجي باستخدام جهاز تحكم عن بُعد (أي من شبكة الويب المفتوحة، بدلاً من الملفات المضمنة في امتداد)، أو جلب مورد لتنفيذه مباشرةً.

كيفية اكتشاف RHC

ليس من الصعب اكتشاف RHC بعد أن تعرف ما تبحث عنه. أَوَّلًا، ابحث عن السلاسل "http:// " أو "https:// " في مشروعك. إذا كان لديك انتهاك بروتوكول RHC، فمن المحتمل أن تتمكن من تحديد مكانهم من خلال العثور عليه. في حال حذف لديك نظام تصميم كامل، أو استخدام تبعيات من npm أو طرف ثالث مصادر الجهات الخارجية، فتأكد من البحث عن النسخة المجمعة من الرمز. لأن هذا هو ما يتم تقييمه من قبل المتجر. إذا كنت لا تزال غير قادر على العثور على المشكلة، فإن الخطوة التالية هي التواصل مع فريق دعم الخدمة الشاملة. هم سنتمكن من توضيح الانتهاكات المحددة، وما هو مطلوب للحصول على الإضافة التي يتم نشرها في أقرب وقت ممكن.

ما يجب فعله إذا طلبت إحدى المكتبات الرمز

وبصرف النظر عن مصدر الرمز، لا يُسمح باستخدام RHC. هذا النمط يتضمن تعليمة برمجية لم تؤلفها، ولكن تم استخدامها فقط كتبعية في مشروعك. واجه بعض المطوّرين الذين يستخدمون Firebase هذه المشكلة عند العمل عن بُعد. كان يتم تضمين الرمز لاستخدامه في مصادقة Firebase. وعلى الرغم من أن هذا مكتبة الطرف الأول (أي المملوكة لـ Google)، ولا يتم تقديم أي استثناءات لـ RHC. أنت بحاجة إلى لتكوين التعليمات البرمجية إما لإزالة RHC أو تحديث العنوان إلى فقم بتضمين التعليمات البرمجية لتبدأ بها. عند مواجهة مشكلة لا تمثّل الرمز التي تقوم بتحميل RHC، ولكن المكتبة التي تستخدمها، فإن أفضل مسار الإجراء هو الاتصال بمؤلف المكتبة. أخبرهم أن هذا يحدث، وتطلب إما حل بديل أو تحديثات على الرمز لإزالته.

بانتظار تحديث المكتبة

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

تدقيق الرمز

هل متأكد من أن الرمز الذي يؤدي إلى الطلب مطلوب؟ إذا كان ذلك ممكنًا حذفها فقط، أو يمكن حذف المكتبة المتسببة في ذلك، ثم حذف هذا الرمز، وتم الانتهاء من المهمة.

بدلاً من ذلك، هل هناك مكتبة أخرى تقدم نفس الميزات؟ تجربة أو مراجعة npmjs.com أو GitHub أو المواقع الأخرى بحثًا عن الخيارات الأخرى التي تلبي نفس حالات الاستخدام.

هزة الأشجار

إذا لم يتم استخدام الرمز الذي يتسبب في انتهاك RHC فعليًا، فربما يكون يمكن حذفها تلقائيًا باستخدام الأدوات. أدوات بناء حديثة مثل تتضمّن webpack وRollup وVite (على سبيل المثال لا الحصر) ميزة. اسم هزة الشجرة. بعد تفعيل ميزة اهتزاز الشجرة في نظام التصميم إزالة أي مسارات رموز غير مُستخدَمة قد يعني هذا أنك لم تحصل فقط على نسخة متوافقة من الرمز البرمجي، ولكنها أكثر تخفيضًا وأسرع أيضًا. من المهم إلى الإشارة إلى أنّه ليس بإمكان جميع المكتبات إجراء عملية هززة في الأشجار، إلا أنّ الكثير منها لا يتكيّف. بعض الإشعارات تحتوي أدوات مثل Rollup وVite على تمكين اهتزاز الشجرة بشكل افتراضي. حزمة ويب يجب إعداده لتفعيله. إذا كنت لا تستخدم بنية كجزء من إضافتك، ولكنك تستخدم مكتبات رموز برمجية، في هذه الحالة شجعنا حقًا على التحقيق في إضافة أداة إنشاء إلى سير العمل. طوِّر في كتابة مشروعات أكثر أمانًا وموثوقية وأكثر قابلية للصيانة.

تعتمد تفاصيل كيفية تنفيذ عملية شجيرة الأشجار على مشروعك المحدد. ولكن لأخذ مثال بسيط باستخدام دمج القنوات، يمكنك إضافة نشاط شجري وتجميع كود مشروعك. على سبيل المثال، إذا كان لديك ملف لا يسجل الدخول إلا مصادقة Firebase، التي تُعرف باسم main.js:

import { GoogleAuthProvider, initializeAuth } from "firebase/auth";

chrome.identity.getAuthToken({ 'interactive': true }, async (token) => {
  const credential = GoogleAuthProvider.credential(null, token);
  try {
    const app = initializeApp({ ... });
    const auth = initializeAuth(app, { popupRedirectResolver: undefined, persistence: indexDBLocalPersistence });
    const { user } = await auth.signInWithCredential(credential)
    console.log(user)
  } catch (e) {
    console.error(error);
  }
});

كل ما عليك فعله بعد ذلك هو إعلام "دمج ملف الإدخال"، وهو المكون الإضافي اللازم تحميل ملفات العُقد @rollup/plugin-node-resolve واسم المخرج الملف الذي تنشئه.

npx rollup --input main.js --plugin '@rollup/plugin-node-resolve' --file compiled.js

عند تنفيذ هذا الأمر في نافذة طرفية، ستتلقى نسخة تم إنشاؤها. من ملف main.js، جميعها مجمعة في ملف واحد اسمه compiled.js.

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

تعديل الملفات تلقائيًا

هناك طريقة متزايدة شيوعًا يمكن من خلالها إدخال رمز مستضاف عن بُعد إلى قاعدة الرموز كفرع فرعي للمكتبة التي تقوم بتضمينها. إذا أرادت المكتبة X import مكتبة Y من شبكة توصيل المحتوى (CDN)، ثم لا تزال بحاجة إلى تحديثها لإنشاء يتم تحميله من مصدر محلي. وباستخدام أنظمة الإنشاء الحديثة، يمكنك إنشاء المكونات الإضافية لاستخراج مرجع بعيد وتضمينه مباشرةً في التعليمة البرمجية.

يعني هذا أن الرمز المعطاة الذي يبدو كالتالي:

import moment from "https://unpkg.com/moment@2.29.4/moment.js"
console.log(moment())

يمكنك إنشاء مكوّن إضافي صغير للبيانات المجمّعة.

import { existsSync } from 'fs';
import fetch from 'node-fetch';

export default {
  plugins: [{
    load: async function transform(id, options, outputOptions) {
      // this code runs over all of out javascript, so we check every import
      // to see if it resolves as a local file, if that fails, we grab it from
      // the network using fetch, and return the contents of that file directly inline
      if (!existsSync(id)) {
        const response = await fetch(id);
        const code = await response.text();

        return code
      }
      return null
    }
  }]
};

بعد تشغيل الإصدار باستخدام المكوّن الإضافي الجديد، سيتم حفظ كل عنوان URL بعيد عن import بغض النظر عما إذا كانت التعليمة البرمجية أو التبعية الفرعية أم لا والتبعية الفرعية أو في أي مكان آخر.

npx rollup --input main.js --config ./rollup.config.mjs --file compiled.js

تعديل الملفات يدويًا

وأبسط خيار هو حذف التعليمة البرمجية التي تتسبب في RHC. فتح في محرر النصوص الذي تختاره، واحذف الأسطر المخالفة. يعد ذلك بشكل عام لا يُنصح بذلك لأنّ المساحة هشّة ويمكن نسيانها. إنه يجعل الحفاظ على مشروعك بشكل أكثر صعوبة عندما يكون هناك ملف يسمى "library.min.js" ليس في الواقع library.min.js. بدلاً من تحرير الملفات الأولية، يمكن الحفاظ عليه وهو استخدام أداة مثل patch-package. هذا رائع خيارًا فعّالاً يتيح لك حفظ التعديلات في ملف، بدلاً من نفسه. فهي قائمة على ملفات التصحيح، وهي النوع نفسه الذي يعمل على تشغيل أنظمة التحكم في الإصدار، مثل Git أو Subversion. تحتاج فقط إلى لتعديل الرمز المخالف يدويًا وحفظ ملف الاختلاف وضبط حزمة لها التغييرات التي تريد تطبيقها. يمكنك قراءة دليل توجيهي كامل في الملف التمهيدي للمشروع إذا كنت تعمل على تصحيح مشروع، نحن حقًا يشجعك على التواصل مع المشروع لطلب إجراء التغييرات قبل بيع المنتج. بينما تجعل حزمة التصحيح إدارة التصحيحات أسهل كثيرًا، فإن وجود فلا شيء يحتاج إلى تصحيح حتى.

ما يجب فعله في حال عدم استخدام الرمز

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

هل هناك أي حل بديل؟

بشكل عام، لا. غير مسموح باستخدام بروتوكول RHC. ومع ذلك، هناك عدد صغير من الحالات التي يُسمح فيها بذلك. غالبًا ما تكون هذه حالات مستحيلاً لأي خيار آخر.

واجهة برمجة تطبيقات النصوص البرمجية للمستخدم

النصوص البرمجية للمستخدم هي مقتطفات رمز صغيرة يتم تقديمها عادةً بواسطة مخصص لمدراء النصوص البرمجية للمستخدم، مثل TamperMonkey Nigeriamonkey. ولا يستطيع هؤلاء المدراء إنشاء رمز حزمة كتبه المستخدمون، لذا تعرض User Script API طريقة لتنفيذ الرمز المقدمة من المستخدم. هذا ليس بديلاً عن chrome.scripting.executeScript أو في بيئات أخرى لتنفيذ الرمز البرمجي. يجب على المستخدمين تفعيل وضع مطور البرامج لتنفيذ أي إجراء. إذا كان تحديث ويب Chrome يعتقد فريق مراجعة المتجر أنه يتم استخدام هذا بطريقة مختلفة عن المخصص له (أي الرمز الذي يقدمه المستخدم)، فقد يتم رفضه أو إزالة بطاقة بيانات المتجر من المتجر.

chrome.debugger

تتيح واجهة برمجة التطبيقات chrome.debugger للإضافات التفاعل مع. بروتوكول أدوات مطوّري البرامج في Chrome وهذا هو البروتوكول ذاته الذي يتم استخدامه أدوات مطوري البرامج في Chrome وعدد كبير من الأدوات الأخرى. باستخدام ذلك، يمكن للإضافة طلب التعليمات البرمجية البعيدة وتنفيذها. تمامًا مثل النصوص البرمجية للمستخدم، لا بديلاً عن chrome.scripting، وتتميز بتجربة مستخدم أكثر بروزًا. أثناء استخدامه، سيرى المستخدم شريط تحذير في أعلى نافذة. في حال إغلاق البانر أو إغلاقه، ستظهر جلسة تصحيح الأخطاء. تم الإنهاء.

لقطة شاشة لشريط العناوين في Chrome تعرض الرسالة "بدأت إضافة Debugger تصحح أخطاء هذا المتصفِّح"
لقطة شاشة لشريط العناوين في Chrome تعرض الرسالة "بدأت إضافة Debugger تصحح أخطاء هذا المتصفِّح"

إطارات iframe في وضع الحماية

إذا احتجت إلى تقييم سلسلة كرمز، وكنت في بيئة DOM (على سبيل المثال، البرنامج النصي للمحتوى، على عكس مشغّل خدمات الإضافات)، ثم هو استخدام إطار iframe في وضع الحماية. لا تتوافق الإضافات مع عناصر مثل eval() تلقائيًا كإجراء وقائي من أجل السلامة. الرموز البرمجية الضارة قد تضع أمان المستخدمين والأمان للخطر. ولكن عندما يتم تنفيذ الرمز البرمجي في مكان آمن فقط مثل iframe الذي تم وضعه في وضع الحماية من بقية الويب، فسيتم تقليل هذه المخاطر بشكل كبير. وفي هذا السياق، تمثل صفحة "أمان المحتوى" ويمكن إلغاء السياسة التي تحظر استخدام eval، ما يسمح لك بتشغيل أي رمز JavaScript صالح.

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

ما يجب فعله في حال عدم موافقتك على القرار

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