الوصف
استخدِم chrome.scripting
API لتنفيذ نص برمجي في سياقات مختلفة.
الأذونات
scripting
مدى التوفّر
البيان
لاستخدام واجهة برمجة تطبيقات chrome.scripting
، يجب الإفصاح عن إذن "scripting"
في البيان بالإضافة إلى أذونات المضيف للصفحات التي تريد إدخال نصوص برمجية فيها. استخدام المفتاح "host_permissions"
أو إذن "activeTab"
الذي يمنح أذونات المضيف المؤقتة. يستخدم المثال التالي إذن activeTab.
{
"name": "Scripting Extension",
"manifest_version": 3,
"permissions": ["scripting", "activeTab"],
...
}
المفاهيم والاستخدام
يمكنك استخدام واجهة برمجة التطبيقات chrome.scripting
لإدخال JavaScript وCSS في
مواقع الويب. هذا يشبه ما يمكنك فعله باستخدام المحتوى
النصوص البرمجية. ولكن باستخدام مساحة الاسم chrome.scripting
،
القرارات في وقت التشغيل.
استهدافات الحقن
يمكنك استخدام المَعلمة target
لتحديد هدف لإدخال JavaScript أو
CSS إلى.
الحقل الوحيد المطلوب هو tabId
. بشكل افتراضي، سيتم تنفيذ عملية حقن في
الإطار الرئيسي لعلامة التبويب المحددة.
function getTabId() { ... }
chrome.scripting
.executeScript({
target : {tabId : getTabId()},
files : [ "script.js" ],
})
.then(() => console.log("script injected"));
للعرض في جميع الإطارات ضِمن علامة التبويب المحدّدة، يمكنك ضبط القيمة المنطقية allFrames
.
إلى true
.
function getTabId() { ... }
chrome.scripting
.executeScript({
target : {tabId : getTabId(), allFrames : true},
files : [ "script.js" ],
})
.then(() => console.log("script injected in all frames"));
يمكنك أيضًا إدخال في إطارات معينة لعلامة تبويب من خلال تحديد إطار فردي
المعرفات. لمزيد من المعلومات حول أرقام تعريف الإطارات، يُرجى الاطّلاع على chrome.webNavigation
.
API:
function getTabId() { ... }
chrome.scripting
.executeScript({
target : {tabId : getTabId(), frameIds : [ frameId1, frameId2 ]},
files : [ "script.js" ],
})
.then(() => console.log("script injected on target frames"));
الرمز الذي تم إدخاله
يمكن للإضافات تحديد الرمز المُراد إدخاله إما عن طريق ملف خارجي أو متغير وقت التشغيل.
الملفات
يتم تحديد الملفات كسلاسل مسارات ذات صلة بجذر الإضافة.
الدليل. سيُدخل الرمز التالي الملف script.js
في الملف الرئيسي
إطار علامة التبويب.
function getTabId() { ... }
chrome.scripting
.executeScript({
target : {tabId : getTabId()},
files : [ "script.js" ],
})
.then(() => console.log("injected script file"));
دوال بيئة التشغيل
عند إدخال JavaScript في scripting.executeScript()
، يمكنك تحديد
الدالة المطلوب تنفيذها بدلاً من ملف. يجب أن تكون هذه الدالة دالة
المتغير المتاح لسياق الإضافة الحالي.
function getTabId() { ... }
function getTitle() { return document.title; }
chrome.scripting
.executeScript({
target : {tabId : getTabId()},
func : getTitle,
})
.then(() => console.log("injected a function"));
function getTabId() { ... }
function getUserColor() { ... }
function changeBackgroundColor() {
document.body.style.backgroundColor = getUserColor();
}
chrome.scripting
.executeScript({
target : {tabId : getTabId()},
func : changeBackgroundColor,
})
.then(() => console.log("injected a function"));
يمكنك حلّ هذه المشكلة باستخدام السمة args
:
function getTabId() { ... }
function getUserColor() { ... }
function changeBackgroundColor(backgroundColor) {
document.body.style.backgroundColor = backgroundColor;
}
chrome.scripting
.executeScript({
target : {tabId : getTabId()},
func : changeBackgroundColor,
args : [ getUserColor() ],
})
.then(() => console.log("injected a function"));
سلاسل بيئة التشغيل
في حالة إدخال CSS داخل صفحة، يمكنك أيضًا تحديد سلسلة لاستخدامها في
الموقع الإلكتروني css
. لا يتوفّر هذا الخيار إلا لـ scripting.insertCSS()
. CANNOT TRANSLATE
لم نتمكّن من تنفيذ سلسلة باستخدام السمة scripting.executeScript()
.
function getTabId() { ... }
const css = "body { background-color: red; }";
chrome.scripting
.insertCSS({
target : {tabId : getTabId()},
css : css,
})
.then(() => console.log("CSS injected"));
التعامل مع النتائج
يتم تمرير نتائج تنفيذ JavaScript إلى الإضافة. نتيجة واحدة يتم تضمينها لكل إطار. يكون الإطار الرئيسي مضمونًا أن يكون الفهرس الأول في الصفيفة الناتجة؛ جميع الإطارات الأخرى بترتيب غير محدد.
function getTabId() { ... }
function getTitle() { return document.title; }
chrome.scripting
.executeScript({
target : {tabId : getTabId(), allFrames : true},
func : getTitle,
})
.then(injectionResults => {
for (const {frameId, result} of injectionResults) {
console.log(`Frame ${frameId} result:`, result);
}
});
لا تعرض الدالة scripting.insertCSS()
أي نتائج.
الوعود
سينتظر Chrome الانتظار في حال كانت القيمة الناتجة من تنفيذ النص البرمجي صحيحة. للوعد بتسوية وإرجاع القيمة الناتجة.
function getTabId() { ... }
async function addIframe() {
const iframe = document.createElement("iframe");
const loadComplete =
new Promise(resolve => iframe.addEventListener("load", resolve));
iframe.src = "https://example.com";
document.body.appendChild(iframe);
await loadComplete;
return iframe.contentWindow.document.title;
}
chrome.scripting
.executeScript({
target : {tabId : getTabId(), allFrames : true},
func : addIframe,
})
.then(injectionResults => {
for (const frameResult of injectionResults) {
const {frameId, result} = frameResult;
console.log(`Frame ${frameId} result:`, result);
}
});
أمثلة
إلغاء تسجيل جميع النصوص البرمجية للمحتوى الديناميكي
يحتوي المقتطف التالي على دالة تلغي تسجيل كل المحتوى الديناميكي. النصوص البرمجية التي سجلتها الإضافة مسبقًا.
async function unregisterAllDynamicContentScripts() {
try {
const scripts = await chrome.scripting.getRegisteredContentScripts();
const scriptIds = scripts.map(script => script.id);
return chrome.scripting.unregisterContentScripts(scriptIds);
} catch (error) {
const message = [
"An unexpected error occurred while",
"unregistering dynamic content scripts.",
].join(" ");
throw new Error(message, {cause : error});
}
}
لتجربة واجهة برمجة تطبيقات chrome.scripting
،
تثبيت نموذج النصوص البرمجية من عيّنات إضافات Chrome
المستودع.
الأنواع
ContentScriptFilter
أماكن إقامة
-
أرقام التعريف
string[] اختيارية
وفي حال تحديدها، لن تعرض
getRegisteredContentScripts
إلا النصوص البرمجية التي تتضمّن معرّفًا محدّدًا في هذه القائمة.
CSSInjection
أماكن إقامة
-
css
سلسلة اختيارية
سلسلة تحتوي على خدمة مقارنة الأسعار (CSS) المطلوب إدخالها يجب تحديد سمة واحدة فقط من
files
وcss
. -
ملفات
string[] اختيارية
مسار ملفات CSS المطلوب إدخالها، وفقًا للدليل الجذري للإضافة. يجب تحديد سمة واحدة فقط من
files
وcss
. -
الأصل
StyleOrigin اختياري
أصل نمط عملية الإدخال وتكون القيمة التلقائية هي
'AUTHOR'
. -
الاستهداف
تفاصيل تحديد الهدف المطلوب إدراج CSS فيه.
ExecutionWorld
عالم JavaScript الذي يجب تنفيذ النص البرمجي بداخله.
Enum
"ISOLATED"
يحدد العالم المعزول، وهو بيئة التنفيذ الفريدة لهذه الإضافة.
"MAIN"
يحدد هذا الحقل العالم الرئيسي لنموذج DOM، وهو بيئة التنفيذ التي تتم مشاركتها مع JavaScript لصفحة المضيف.
InjectionResult
أماكن إقامة
-
documentId
سلسلة
الإصدار 106 من Chrome أو الإصدارات الأحدثالمستند المرتبط بعملية الحقن
-
frameId
الرقم
الإصدار 90 من Chrome أو الإصدارات الأحدثالإطار المرتبط بالحقن
-
نتيجة
أي خيار اختياري
هي نتيجة تنفيذ النص البرمجي.
InjectionTarget
أماكن إقامة
-
allFrames
قيمة منطقية اختيارية
لتحديد ما إذا كان يجب إدخال النص البرمجي في جميع الإطارات ضمن علامة التبويب. وتكون القيمة التلقائية على "خطأ". يجب ألا يكون هذا صحيحًا إذا تم تحديد
frameIds
. -
documentIds
string[] اختيارية
الإصدار 106 من Chrome أو الإصدارات الأحدثأرقام تعريف أرقام تعريف المستندات المحدّدة المطلوب إدخالها. ويجب عدم ضبط هذه السياسة في حال ضبط السياسة
frameIds
. -
frameIds
number[] اختياري
أرقام تعريف إطارات محدَّدة لإدخالها.
-
tabId
الرقم
رقم تعريف علامة التبويب التي سيتم الإدخال فيها.
RegisteredContentScript
أماكن إقامة
-
allFrames
قيمة منطقية اختيارية
إذا تم تحديد "صحيح"، سيتم إدخاله في جميع اللقطات، حتى إذا لم يكن الإطار في أقصى ارتفاع في علامة التبويب. ويتم التحقق من كل إطار بشكل مستقل لمعرفة متطلبات عنوان URL. ولن يتم إدخاله في الإطارات الفرعية في حال عدم استيفاء متطلبات عناوين URL. ويتم ضبط هذه القيمة على "خطأ" تلقائيًا، ما يعني أنّه تتم مطابقة الإطار العلوي فقط.
-
css
string[] اختيارية
قائمة ملفات CSS المراد إدخالها في الصفحات المطابقة يتم إدخال هذه العناصر بالترتيب الذي تظهر به في هذا الصفيف، قبل إنشاء أو عرض أي نموذج كائن في الصفحة.
-
excludeMatches
string[] اختيارية
تستثني الصفحات التي سيتمّ إدخال النص البرمجي للمحتوى فيها. ويمكنك الاطّلاع على أنماط المطابقة للحصول على مزيد من التفاصيل حول بنية هذه السلاسل.
-
id
سلسلة
رقم تعريف النص البرمجي للمحتوى، المحدّد في طلب بيانات من واجهة برمجة التطبيقات. يجب ألا يبدأ بـ "_" لأنّه محجوز كبادئة لمعرّفات النصوص البرمجية التي تمّ إنشاؤها.
-
JavaScript
string[] اختيارية
قائمة ملفات JavaScript المراد إدخالها في الصفحات المطابقة يتم إدخالها بالترتيب الذي تظهر به في هذا الصفيف.
-
matchOriginAsFallback
قيمة منطقية اختيارية
الإصدار 119 من Chrome أو الإصدارات الأحدثيشير إلى ما إذا كان من الممكن إدخال النص البرمجي في إطارات حيث يحتوي عنوان URL على مخطط غير متوافق. على وجه التحديد: about:, data:, blob:, or filesystem:. وفي هذه الحالات، يتم التحقّق من أصل عنوان URL لتحديد ما إذا كان يجب إدخال النص البرمجي. إذا كان المصدر هو
null
(كما هو الحال مع عناوين URL للبيانات)، يكون المصدر المستخدَم إمّا الإطار الذي أنشأ الإطار الحالي أو الإطار الذي بدأ الانتقال إلى هذا الإطار. يُرجى العِلم أنّ هذا قد لا يكون الإطار الرئيسي. -
فلتر مطابق لـ
string[] اختيارية
تحدِّد هذه السياسة الصفحات التي سيتم إدخال النص البرمجي للمحتوى فيها. ويمكنك الاطّلاع على أنماط المطابقة للحصول على مزيد من التفاصيل حول بنية هذه السلاسل. يجب تحديده لـ
registerContentScripts
. -
persistAcrossSessions
قيمة منطقية اختيارية
تحدِّد هذه السياسة ما إذا كان النص البرمجي للمحتوى هذا سيستمر في الجلسات المستقبلية. وتكون القيمة التلقائية هي true.
-
runAt
RunAt اختياري
تُحدِّد هذه السياسة وقت إدخال ملفات JavaScript في صفحة الويب. القيمة المفضّلة والتلقائية هي
document_idle
. -
العالم
ExecutionWorld اختياري.
الإصدار 102 من Chrome أو الإصدارات الأحدث"عالم" JavaScript لتشغيل النص البرمجي فيها. وتكون القيمة التلقائية هي
ISOLATED
.
ScriptInjection
أماكن إقامة
-
الوسيط
أي[] اختياري
الإصدار 92 من Chrome أو الإصدارات الأحدثالوسيطات المطلوب تمريرها إلى الدالة المقدمة. لا يكون هذا الإجراء صالحًا إلا في حال تحديد معلَمة
func
. يجب أن تكون هذه الوسيطات قابلة للتسلسل من خلال JSON. -
ملفات
string[] اختيارية
مسار ملفات JS أو CSS المراد إدخالها وفقًا للدليل الجذري للإضافة. يجب تحديد سمة واحدة فقط من
files
أوfunc
. -
injectImmediately
قيمة منطقية اختيارية
الإصدار 102 من Chrome أو الإصدارات الأحدثما إذا كان يجب بدء الحقن في الهدف في أقرب وقت ممكن. ويُرجى العِلم بأنّ هذا الإجراء لا يضمن حدوث الإدخال قبل تحميل الصفحة، لأنّه من المحتمل أن يكون قد تم تحميل الصفحة عند وصول النص البرمجي إلى الهدف.
-
الاستهداف
تفاصيل تحدد الهدف الذي سيتم إدخال النص البرمجي فيه.
-
العالم
ExecutionWorld اختياري.
الإصدار 95 من Chrome أو الإصدارات الأحدث"عالم" JavaScript لتشغيل النص البرمجي فيها. وتكون القيمة التلقائية هي
ISOLATED
. -
func
null اختياري
الإصدار 92 من Chrome أو الإصدارات الأحدثدالة JavaScript المطلوب إدخالها. سيتم إنشاء هذه الدالة بشكل تسلسلي ثم إلغاء تسلسلها لإجراء الحقن. وهذا يعني أنه سيتم فقدان أي معلمات مرتبطة وسياق التنفيذ. يجب تحديد سمة واحدة فقط من
files
أوfunc
.تبدو دالة
func
كما يلي:() => {...}
StyleOrigin
أصل تغيير النمط. اطّلِع على أصول النمط للحصول على مزيد من المعلومات.
Enum
"AUTHOR"
"USER"
الطُرق
executeScript()
chrome.scripting.executeScript(
injection: ScriptInjection,
callback?: function,
)
إدخال نص برمجي في السياق المستهدف سيتم تلقائيًا تنفيذ النص البرمجي على document_idle
، أو على الفور إذا سبق أن تم تحميل الصفحة. في حال ضبط السمة injectImmediately
، سيتم إدخال النص البرمجي بدون انتظار، حتى إذا لم تكتمل عملية تحميل الصفحة. وإذا تم تقييم النص البرمجي ووعدنا به، سينتظر المتصفح تسوية الوعد وعرض القيمة الناتجة.
المعلمات
-
الحقن
تفاصيل النص البرمجي الذي سيتم إدخاله.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:(results: InjectionResult[]) => void
-
النتائج
-
المرتجعات
-
Promise<InjectionResult[]>
الإصدار 90 من Chrome أو الإصدارات الأحدثتتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
getRegisteredContentScripts()
chrome.scripting.getRegisteredContentScripts(
filter?: ContentScriptFilter,
callback?: function,
)
عرض جميع النصوص البرمجية للمحتوى المسجّلة ديناميكيًا لهذه الإضافة والتي تتطابق مع الفلتر المحدَّد.
المعلمات
-
تصفية
ContentScriptFilter اختياري
كائن لفلترة النصوص البرمجية المسجّلة ديناميكيًا للإضافة
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:(scripts: RegisteredContentScript[]) => void
-
نصوص برمجية
-
المرتجعات
-
Promise<RegisteredContentScript[]>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
insertCSS()
chrome.scripting.insertCSS(
injection: CSSInjection,
callback?: function,
)
إدراج ورقة أنماط CSS في سياق هدف. وفي حال تحديد إطارات متعددة، يتم تجاهل عمليات الإدخال غير الناجحة.
المعلمات
-
الحقن
تفاصيل الأنماط المطلوب إدراجها.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
الإصدار 90 من Chrome أو الإصدارات الأحدثتتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
registerContentScripts()
chrome.scripting.registerContentScripts(
scripts: RegisteredContentScript[],
callback?: function,
)
يتم تسجيل نص برمجي واحد أو أكثر للمحتوى لهذه الإضافة.
المعلمات
-
نصوص برمجية
يحتوي على قائمة بالنصوص البرمجية المطلوب تسجيلها. إذا كانت هناك أخطاء أثناء تحليل النصوص البرمجية/التحقق من الملف، أو إذا كانت المعرفات المحددة موجودة بالفعل، فلن يتم تسجيل أي نصوص برمجية.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
removeCSS()
chrome.scripting.removeCSS(
injection: CSSInjection,
callback?: function,
)
يزيل ورقة أنماط CSS التي تم إدراجها مسبقًا بواسطة هذه الإضافة من سياق مستهدف.
المعلمات
-
الحقن
تفاصيل الأنماط المطلوب إزالتها. يُرجى العِلم أنّ السمات
css
وfiles
وorigin
يجب أن تتطابق تمامًا مع ورقة الأنماط التي يتم إدراجها من خلالinsertCSS
. محاولة إزالة ورقة أنماط غير موجودة هي محاولة لا يمكن تنفيذها. -
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
unregisterContentScripts()
chrome.scripting.unregisterContentScripts(
filter?: ContentScriptFilter,
callback?: function,
)
يؤدي إلى إلغاء تسجيل النصوص البرمجية للمحتوى لهذه الإضافة.
المعلمات
-
تصفية
ContentScriptFilter اختياري
في حال تحديد هذا الخيار، يتم فقط إلغاء تسجيل النصوص البرمجية للمحتوى الديناميكي التي تتطابق مع الفلتر. وبخلاف ذلك، يتم إلغاء تسجيل جميع النصوص البرمجية للمحتوى الديناميكي للإضافة.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.
updateContentScripts()
chrome.scripting.updateContentScripts(
scripts: RegisteredContentScript[],
callback?: function,
)
تعدّل نصًا برمجيًا واحدًا أو أكثر للمحتوى لهذه الإضافة.
المعلمات
-
نصوص برمجية
يحتوي على قائمة بالنصوص البرمجية المطلوب تعديلها. لا يتم تعديل سمة للنص البرمجي الحالي إلا إذا تم تحديدها في هذا الكائن. إذا كانت هناك أخطاء أثناء تحليل النص البرمجي/التحقق من الملف، أو إذا كانت المعرفات المحددة لا تتوافق مع نص برمجي مسجل بالكامل، فلن يتم تحديث أي نصوص برمجية.
-
رد الاتصال
الدالة اختيارية
تظهر المَعلمة
callback
على النحو التالي:() => void
المرتجعات
-
وعود <باطلة>
تتوفّر الوعود في الإصدار Manifest V3 والإصدارات الأحدث، ولكن يتم توفير معاودة الاتصال. التوافق مع الأنظمة القديمة. لا يمكنك استخدام كلتيهما في نفس استدعاء الدالة. تشير رسالة الأشكال البيانية يتم حل الوعد بنفس النوع الذي يتم إرساله إلى معاودة الاتصال.