الوصف
استخدِم واجهة برمجة التطبيقات userScripts
لتنفيذ النصوص البرمجية للمستخدم في سياق النصوص البرمجية للمستخدم.
الأذونات
userScripts
لاستخدام واجهة برمجة التطبيقات chrome.userScripts
، أضِف الإذن "userScripts"
إلى ملف sitemap.json و"host_permissions"
للمواقع الإلكترونية التي تريد تنفيذ نصوص برمجية عليها.
{
"name": "User script test extension",
"manifest_version": 3,
"minimum_chrome_version": "120",
"permissions": [
"userScripts"
],
"host_permissions": [
"*://example.com/*"
]
}
مدى التوفّر
المفاهيم والاستخدام
النص البرمجي للمستخدم هو جزء من رمز يتم إدخاله في صفحة ويب لتعديل مظهره أو سلوكه. يتم إنشاء النصوص البرمجية من قِبل المستخدمين، أو يتم تنزيلها من مستودع النصوص البرمجية أو إضافة النصوص البرمجية للمستخدم.
وضع مطور البرامج لمستخدمي الإضافات
بصفتك مطور إضافات، تم تفعيل وضع مطور البرامج في تثبيت Chrome. بالنسبة إلى إضافات النصوص البرمجية للمستخدم، سيحتاج المستخدمون أيضًا إلى تفعيل وضع مطوّر البرامج. في ما يلي تعليمات يمكنك نسخها ولصقها في مستنداتك.
- انتقِل إلى صفحة "الإضافات" من خلال إدخال
chrome://extensions
في علامة تبويب جديدة. (حسب تصميمchrome://
، عناوين URL غير قابلة للربط.) فعّل وضع مطور البرامج من خلال النقر على مفتاح التبديل بجوار وضع مطور البرامج.
يمكنك معرفة ما إذا كان "وضع مطوّر البرامج" مفعَّلاً من خلال التحقّق مما إذا كان chrome.userScripts
يعرض رسالة خطأ. على سبيل المثال:
function isUserScriptsAvailable() {
try {
// Property access which throws if developer mode is not enabled.
chrome.userScripts;
return true;
} catch {
// Not available.
return false;
}
}
العمل في عوالم منعزلة
يمكن تشغيل النصوص البرمجية للمستخدم والمحتوى في عالم منعزل أو في العالم الرئيسي. العالم المعزول هو بيئة تنفيذ لا يمكن الوصول إليها من خلال صفحة مضيف أو إضافات أخرى. يتيح هذا للنص البرمجي للمستخدم تغيير بيئة JavaScript بدون التأثير في صفحة المضيف أو الإضافات الأخرى. النصوص البرمجية للمستخدم والمحتوى. وعلى العكس، لا تكون النصوص البرمجية للمستخدم (ونصوص المحتوى البرمجية) مرئية لصفحة المضيف أو نصوص المستخدم والمحتوى للإضافات الأخرى. يمكن الوصول إلى النصوص البرمجية التي يتم تشغيلها في العالم الرئيسي لاستضافة الصفحات والإضافات الأخرى، كما تكون مرئية لصفحات المضيف والإضافات الأخرى. لاختيار العالم، عليك استخدام "USER_SCRIPT"
أو "MAIN"
عند الاتصال userScripts.register()
.
لضبط سياسة أمان المحتوى للعالم USER_SCRIPT
، اتصل بالرقم userScripts.configureWorld()
:
chrome.userScripts.configureWorld({
csp: "script-src 'self'"
});
المراسلة
على غرار النصوص البرمجية للمحتوى والمستندات خارج الشاشة، تتواصل النصوص البرمجية للمستخدم مع أجزاء أخرى من الإضافة باستخدام ميزة المراسلة (أي يمكنهم استدعاء runtime.sendMessage()
وruntime.connect()
كما يفعل أي جزء آخر من الإضافة). وفي المقابل، يتم تلقّيها باستخدام معالِجات أحداث مخصّصة (أي أنّها لا تستخدم onMessage
أو onConnect
). يُطلق على هذه المعالجات اسمَي runtime.onUserScriptMessage
وruntime.onUserScriptConnect
. تسهّل المعالجات المخصصة تحديد الرسائل من النصوص البرمجية للمستخدم، والتي تعد سياقًا أقل موثوقية.
قبل إرسال رسالة، يجب الاتصال بـ configureWorld()
مع ضبط الوسيطة messaging
على true
. تجدر الإشارة إلى أنّه يمكن تمرير كلٍّ من الوسيطات csp
وmessaging
في الوقت نفسه.
chrome.userScripts.configureWorld({
messaging: true
});
تحديثات الإضافات
يتم محو النصوص البرمجية للمستخدم عند تحديث الإضافة. ويمكنك إضافتها مرة أخرى من خلال تنفيذ الرمز في معالِج أحداث runtime.onInstalled
ضمن مشغّل خدمات الإضافات. عليك الردّ فقط على السبب "update"
الذي تم تمريره إلى معاودة الاتصال بالحدث.
مثال
هذا المثال مأخوذ من نموذج userScript في مستودع النماذج لدينا.
تسجيل نص برمجي
يعرض المثال التالي طلبًا أساسيًا إلى register()
. الوسيطة الأولى هي صفيف من كائنات تحدد النصوص البرمجية المراد تسجيلها. هناك خيارات أكثر مما هو معروض هنا.
chrome.userScripts.register([{
id: 'test',
matches: ['*://*/*'],
js: [{code: 'alert("Hi!")'}]
}]);
الأنواع
ExecutionWorld
عالم JavaScript الذي يجب تنفيذ النص البرمجي للمستخدم بداخله.
Enum
"MAIN"
يحدد هذا الحقل بيئة تنفيذ نموذج العناصر في المستند (DOM)، وهي بيئة التنفيذ التي تتم مشاركتها مع JavaScript لصفحة المضيف.
"USER_script"
يحدد هذا الخيار بيئة التنفيذ الخاصة بالنصوص البرمجية للمستخدم والمُستثناة من سياسة أمان المحتوى (CSP) للصفحة.
RegisteredUserScript
أماكن إقامة
-
allFrames
قيمة منطقية اختيارية
في حال اختيار القيمة "true"، سيتم إدخال تلك البيانات في جميع اللقطات، حتى إذا لم يكن الإطار هو الإطار العلوي في علامة التبويب. ويتم التحقق من كل إطار بشكل مستقل لمعرفة متطلبات عنوان URL. ولن يتم إدخاله في الإطارات الفرعية في حال عدم استيفاء متطلبات عناوين URL. ويتم ضبط هذه القيمة على "خطأ" تلقائيًا، ما يعني أنّه تتم مطابقة الإطار العلوي فقط.
-
excludeGlobs
string[] اختيارية
تحدِّد هذه السياسة أنماط أحرف البدل للصفحات التي لن يتم إدخال النص البرمجي للمستخدم فيها.
-
excludeMatches
string[] اختيارية
تستثني الصفحات التي سيتم إدخال النص البرمجي للمستخدم فيها بطريقة أخرى. ويمكنك الاطّلاع على أنماط المطابقة للحصول على مزيد من التفاصيل حول بنية هذه السلاسل.
-
id
سلسلة
رقم تعريف النص البرمجي للمستخدم المحدّد في طلب بيانات من واجهة برمجة التطبيقات. يجب ألا تبدأ هذه السمة بـ "_". لأنّه محجوز كبادئة لمعرّفات النصوص البرمجية التي تمّ إنشاؤها.
-
includeGlobs
string[] اختيارية
تُحدِّد أنماط أحرف البدل للصفحات التي سيتم إدخال النص البرمجي للمستخدم فيها.
-
JavaScript
قائمة عناصر ScriptSource التي تحدّد مصادر النصوص البرمجية التي سيتم إدخالها في الصفحات المطابقة.
-
فلتر مطابق لـ
string[] اختيارية
تحدِّد هذه السياسة الصفحات التي سيتم إدخال النص البرمجي للمستخدم فيها. ويمكنك الاطّلاع على أنماط المطابقة للحصول على مزيد من التفاصيل حول بنية هذه السلاسل. يجب تحديد هذه السمة لـ ${ref:register}.
-
runAt
RunAt اختياري
تُحدِّد هذه السياسة وقت إدخال ملفات JavaScript في صفحة الويب. القيمة المفضّلة والتلقائية هي
document_idle
. -
العالم
ExecutionWorld اختياري.
بيئة تنفيذ JavaScript المطلوب تشغيل النص البرمجي فيها والقيمة التلقائية هي
`USER_SCRIPT`
.
ScriptSource
أماكن إقامة
-
رمز
سلسلة اختيارية
سلسلة تحتوي على رمز JavaScript المطلوب إدخاله يجب تحديد سمة واحدة فقط من
file
أوcode
. -
ملف
سلسلة اختيارية
مسار ملف JavaScript المطلوب إدخاله بالنسبة إلى الدليل الجذري للإضافة. يجب تحديد سمة واحدة فقط من
file
أوcode
.
UserScriptFilter
أماكن إقامة
-
أرقام التعريف
string[] اختيارية
لا تعرض
getScripts
إلا النصوص البرمجية التي تتضمن المعرّفات المحددة في هذه القائمة.
WorldProperties
أماكن إقامة
-
سياسة أمان المحتوى (CSP)
سلسلة اختيارية
تحدِّد هذه السياسة نظام سياسة توفير الطاقة (CPP) العالمي. والخيار التلقائي هو توفير بروتوكول أمان طبقة النقل لمخطّطات البيانات (csp) للعالم (
`ISOLATED`
). -
المراسلة
قيمة منطقية اختيارية
يحدِّد هذا الإعداد ما إذا كان سيتم الكشف عن واجهات برمجة تطبيقات المراسلة. والقيمة التلقائية هي
false
.
الطُرق
configureWorld()
chrome.userScripts.configureWorld(
properties: WorldProperties,
callback?: function,
)
تضبط هذه السياسة بيئة تنفيذ `USER_SCRIPT`
.
المعلمات
-
المواقع
يحتوي على إعدادات عالم النص البرمجي للمستخدم.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
getScripts()
chrome.userScripts.getScripts(
filter?: UserScriptFilter,
callback?: function,
)
تعرض جميع النصوص البرمجية المسجّلة ديناميكيًا الخاصة بالمستخدم لهذه الإضافة.
المعلمات
-
تصفية
UserScriptFilter اختياري
في حال تحديد هذه الطريقة، يتم عرض النصوص البرمجية التي تطابقها فقط للمستخدم.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:(scripts: RegisteredUserScript[]) => void
-
نصوص برمجية
-
المرتجعات
-
Promise<RegisteredUserScript[]>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
register()
chrome.userScripts.register(
scripts: RegisteredUserScript[],
callback?: function,
)
يتم تسجيل نص برمجي واحد أو أكثر للمستخدم لهذه الإضافة.
المعلمات
-
نصوص برمجية
يحتوي على قائمة بالنصوص البرمجية للمستخدم المطلوب تسجيلها.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
unregister()
chrome.userScripts.unregister(
filter?: UserScriptFilter,
callback?: function,
)
يؤدي إلى إلغاء تسجيل جميع النصوص البرمجية المسجّلة ديناميكيًا الخاصة بالمستخدم لهذه الإضافة.
المعلمات
-
تصفية
UserScriptFilter اختياري
في حالة تحديد هذه الطريقة، تلغي هذه الطريقة تسجيل النصوص البرمجية للمستخدم المطابقة لها فقط.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
update()
chrome.userScripts.update(
scripts: RegisteredUserScript[],
callback?: function,
)
تُستخدَم لتعديل نص برمجي واحد أو أكثر للمستخدم في هذه الإضافة.
المعلمات
-
نصوص برمجية
يحتوي على قائمة بالنصوص البرمجية للمستخدم المطلوب تعديلها. لا يتم تعديل سمة للنص البرمجي الحالي إلا إذا تم تحديدها في هذا الكائن. إذا كانت هناك أخطاء أثناء تحليل النص البرمجي/التحقق من الملف، أو إذا كانت المعرفات المحددة لا تتوافق مع نص برمجي مسجل بالكامل، فلن يتم تحديث أي نصوص برمجية.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.