המפתח "content_scripts"
מציין קובץ JavaScript או CSS שנטען באופן סטטי, שישמש בכל פעם שפותחים דף שתואם לתבנית URL מסוימת. תוספים יכולים גם להחדיר סקריפטים של תוכן באופן פרוגרמטי. לפרטים נוספים, אפשר לעיין במאמר החדרת סקריפטים.
מניפסט
אלו המפתחות הנתמכים של "content_scripts"
. נדרשים רק המפתח "matches"
וגם "js"
או "css"
.
manifest.json
{
"name": "My extension",
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"css": ["my-styles.css"],
"js": ["content-script.js"],
"exclude_matches": ["*://*/*foo*"],
"include_globs": ["*example.com/???s/*"],
"exclude_globs": ["*bar*"],
"all_frames": false,
"match_origin_as_fallback": false,
"match_about_blank": false,
"run_at": "document_idle",
"world": "ISOLATED",
}
],
...
}
קבצים
כל קובץ חייב להכיל נתיב יחסי למשאב בתיקיית השורש של התוסף. קו נטוי לפנים (/
) נחתך באופן אוטומטי. המפתח "run_at"
מציין מתי כל קובץ יוחדר.
"css"
– מערך- אופציונלי. מערך של נתיבי קובצי CSS, שהוחדרו לפי הסדר של המערך הזה ולפני שמתרחשת בניית DOM או עיבוד דפים.
"js"
– מערך,- אופציונלי. מערך נתיבי קובץ JavaScript, שהוחדרו לפי הסדר שבו הם מופיעים במערך הזה, לאחר החדרת קובצי CSS. כל מחרוזת במערך חייבת להיות נתיב יחסי למשאב בתיקיית השורש של התוסף. קו נטוי ('/') נחתך באופן אוטומטי.
כתובות URL של התאמות
נדרש רק המאפיין "matches"
. לאחר מכן, אפשר להשתמש ב-"exclude_matches"
, ב-"include_globs"
וב-"exclude_globs"
כדי להתאים אישית את כתובות ה-URL שאליהן רוצים להוסיף קוד. המפתח "matches"
יפעיל אזהרה.
"matches"
– מערך- חובה. מציינת לאילו תבניות של כתובות URL יש להחדיר את הסקריפטים של התוכן. לתחביר, אפשר לעיין במאמר תבניות התאמה.
"exclude_matches"
– מערך- אופציונלי. מחריגה את תבניות ה-URL שבהן יש להחדיר את סקריפטים של התוכן. לתחביר, אפשר לעיין במאמר תבניות התאמה.
"include_globs"
– מערך- אופציונלי. המערכת מחילה את הערך אחרי התאמות כדי לכלול רק את כתובות ה-URL שתואמות גם לאזור הזה בעולם. נועדה לאמולציה של מילת המפתח @include Greeasemonkey.
"exclude_globs"
– מערך- אופציונלי. המערכת מחילה התאמות אחרי התאמות כדי להחריג כתובות URL שתואמות לכדור הארץ הזה. נועדה לדמות את מילת המפתח @Exclude (החרגה) של Graeasemonkey.
כתובות URL של Glob הן כתובות שמכילות "תווים כלליים לחיפוש" * וסימני שאלה. התו הכללי לחיפוש * תואם לכל מחרוזת בכל אורך, כולל מחרוזת ריקה, ואילו סימן השאלה ? תואם לכל תו בודד.
סקריפט התוכן מוחדר לדף אם:
- כתובת ה-URL שלו תואמת לכל הדפוסים הבאים:
"matches"
ו-"include_globs"
. - וכתובת ה-URL לא תואמת לתבניות
"exclude_matches"
או"exclude_globs"
.
גלובוסים ודוגמאות להתאמה של כתובות URL
"include_globs"
manifest.json
{
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"include_globs": ["https://???.example.com/foo/*"],
"js": ["content-script.js"]
}
],
...
}
https://www.example.com/foo/bar https://the.example.com/foo/
https://my.example.com/foo/bar https://example.com/foo/* https://www.example.com/foo
manifest.json
{
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"include_globs": ["*example.com/???s/*"],
"js": ["content-script.js"]
}
],
...
}
https://www.example.com/arts/index.html https://www.example.com/jobs/index.html
https://www.example.com/sports/index.html https://www.example.com/music/index.html
"exclude_globs"
manifest.json
{
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"exclude_globs": ["*science*"],
"js": ["content-script.js"]
}
],
...
}
https://history.example.com https://.example.com/music
https://science.example.com https://www.example.com/science
דוגמה להתאמה אישית מתקדמת
manifest.json
{
...
"content_scripts": [
{
"matches": ["https://*.example.com/*"],
"exclude_matches": ["*://*/*business*"],
"include_globs": ["*example.com/???s/*"],
"exclude_globs": ["*science*"],
"js": ["content-script.js"]
}
],
...
}
https://www.example.com/arts/index.html https://.example.com/jobs/index.html
https://science.example.com https://www.example.com/jobs/business https://www.example.com/science
מסגרות
המפתח "all_frames"
מציין אם סקריפט התוכן צריך להיות מוחדר לכל המסגרות שתואמות לדרישות שצוינו לגבי כתובת ה-URL. אם המדיניות מוגדרת לערך false
, תתבצע החדרה רק למסגרת העליונה ביותר. אפשר להשתמש בו יחד עם "match_about_blank"
כדי להזריק למסגרת about:blank
.
כדי לבצע החדרה למסגרות אחרות כמו data:
, blob:
ו-filesystem:
, צריך להגדיר את "match_origin_as_fallback"
ל-true
. מידע נוסף מופיע במאמר החדרה במסגרות קשורות.
- ערך בוליאני של
"all_frames"
- אופציונלי. ערך ברירת המחדל הוא
false
. כלומר, מתבצעת התאמה רק לפריים העליון. אם המדיניות מוגדרת כ-True, תתבצע החדרה לכל הפריימים, גם אם המסגרת היא לא המסגרת העליונה בכרטיסייה. כל מסגרת נבדקת בנפרד לפי הדרישות של כתובות ה-URL. אם היא לא עומדת בדרישות לגבי כתובת ה-URL, היא לא תוחזר למסגרות צאצא. "match_about_blank"
- בוליאני- אופציונלי. ברירת המחדל היא
false
. האם הסקריפט צריך להכניס לשימוש במסגרתabout:blank
שבה כתובת ה-URL הראשית תואמת לאחד מהדפוסים שהוצהרו ב-"matches"
. "match_origin_as_fallback"
– בוליאני- אופציונלי. ברירת המחדל היא
false
. האם הסקריפט צריך להחדיר מסגרות שנוצרו על ידי מקור תואם, אך ייתכן שכתובת ה-URL או המקור שלו לא תואמים ישירות לדפוס. אלה כוללות פריימים עם סכמות שונות, כמוabout:
,data:
,blob:
ו-filesystem:
.
זמן ריצה וסביבת הפעלה
כברירת מחדל, סקריפטים של תוכן מוחדרים כשהמסמך וכל המשאבים מסיימים לטעון, והם נמצאים בסביבת הפעלה פרטית ומבודדת שלא נגישה לדף או לתוספים אחרים. אפשר לשנות את ברירות המחדל האלה במקשים הבאים:
"run_at"
–document_start
|document_end
|document_idle
- אופציונלי. מציינת מתי הסקריפט יוחדר לדף. היא תואמת למצבי הטעינה של Document.readyState:
"document_start"
: ה-DOM עדיין בטעינה."document_end"
: המשאבים בדף עדיין נטענים"document_idle"
: הטעינה של ה-DOM והמשאבים הסתיימה. (זוהי ברירת המחדל)
"world"
–ISOLATED
|MAIN
- אופציונלי. העולם של JavaScript שבו סקריפט יופעל. ברירת המחדל היא
"ISOLATED"
, שהיא סביבת ההפעלה הייחודית לסקריפט התוכן. אם בוחרים את העולם"MAIN"
, הסקריפט ישתף את סביבת ההפעלה עם ה-JavaScript של הדף המארח. מידע נוסף זמין במאמר עבודה בעולמות מבודדים.
דוגמה
אפשר לעיין במדריך הפעלה בכל דף כדי לבנות תוסף שמוסיף סקריפט תוכן במניפסט.