عناصر تحكُّم المستخدم في أذونات المضيف: دليل النقل

ملخّص

ما الذي سيتغيّر؟

بدءًا من إصدار Chrome 70، يمكن للمستخدمين تقييد وصول مضيف الإضافات إلى قائمة مخصّصة من المواقع، أو من ضبط الإضافات لطلب نقرة للوصول إلى الصفحة الحالية.

ما هي واجهات برمجة التطبيقات المتأثرة؟

سيؤثّر هذا التغيير في أي واجهات برمجة تطبيقات متأثرة بأذونات المضيف المحدّدة في بيان الإضافة، بالإضافة إلى النصوص البرمجية للمحتوى. تتضمّن واجهات برمجة التطبيقات التي تتطلّب أذونات المضيف webRequest وملفات تعريف الارتباط وtabs.executeScript() وtabs.insertCSS() وتنفيذ الطلبات من مصادر متعددة، من خلال واجهة برمجة تطبيقات XMLHTTPRequest أو fetch() على سبيل المثال.

تقييد الوصول

كيف يمكن للمستخدم تقييد الوصول؟

يمكن للمستخدمين اختيار السماح بتشغيل إضافتك عند النقر أو على مجموعة محدّدة من المواقع الإلكترونية أو على جميع المواقع الإلكترونية المطلوبة. يتم عرض هذه الخيارات للمستخدمين على صفحة chrome://extensions وكذلك في قائمة سياق الإضافة.

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

ماذا يحدث إذا اختار أحد المستخدمين تشغيل إضافتي "عند النقر"؟

تعمل الإضافة بشكل أساسي كما لو كانت تستخدم إذن activeTab. ويتم منح الإضافة إذن الوصول المؤقت إلى أي مضيف ينقر المستخدم على الإضافة عليه، إذا كانت الإضافة قد طلبت الوصول إليها (وليس موقعًا إلكترونيًا محظورًا، مثل chrome://settings). عند ضبط Chrome للعمل عند النقر، يضع Chrome شارةً على الإضافة باستخدام دائرة وتظليل القطرات (انظر أدناه) للإشارة إلى أنه يطلب الوصول إلى موقع إلكتروني معيّن.

لقطة شاشة لشارات Chrome التي يتم إضافتها إلى رمز الإضافة في شريط الأدوات

ماذا يحدث إذا اختار أحد المستخدمين تشغيل إضافتي على مواقع إلكترونية محددة؟

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

ماذا يحدث إذا اختار أحد المستخدمين عرض إضافتي على جميع المواقع الإلكترونية؟

يمكن للإضافة الوصول تلقائيًا إلى أي مواقع إلكترونية مطلوبة في البيان.

سلوكيات واجهة برمجة التطبيقات

واجهة برمجة تطبيقات طلب الويب

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

النصوص البرمجية للمحتوى، tab.executeScript()، وtab.insertCSS()

سيظل بإمكان الإضافة إدخال نصوص برمجية وأوراق أنماط تلقائيًا لأي مواقع إلكترونية يمكنها الوصول إليها. أما بالنسبة إلى المواقع الإلكترونية التي لا يمكن للإضافة الوصول إليها، يضيف Chrome شارة إلى الإضافة للإشارة إلى أنّ الإضافة تطلب الوصول إلى الصفحة. ويمكن للمستخدم بعد ذلك منح إذن الوصول إلى الإضافة. إذا تم تعيين النص البرمجي للمحتوى على الإدخال في document_idle، فسيتم إدخال النص البرمجي على الفور. وبخلاف ذلك، يطلب Chrome من المستخدم إعادة تحميل الصفحة للسماح للإضافة بإدخال نصوص برمجية في وقت سابق أثناء تحميل الصفحة (في document_start أو document_end). لا يتم استدعاء عمليات معاودة الاتصال للطريقتَين tabs.executeScript() وtabs.insertCSS() إلا إذا منح المستخدم إذنًا بالوصول إلى الموقع الإلكتروني.

ملفات تعريف الارتباط وصفحة الخلفية XHR

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

يوضّح المثال أدناه كيفية تطبيق هذه الطريقة بالنسبة إلى واجهة برمجة تطبيقات ملفات تعريف الارتباط.

قبل:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

بعد:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

النقل

ما هي أفضل الممارسات لتجنُّب التأثر سلبيًا؟

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

ماذا يحدث لإعدادات المستخدمين الحاليين؟

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

كيف يمكنني التحقق من أنّ الإضافة لديها إذن بالتشغيل على أحد المواقع الإلكترونية؟

يمكنك استخدام واجهة برمجة التطبيقات permissions.contains() للتحقق مما إذا تم منح إضافتك إمكانية الوصول إلى مصدر معيّن.