תיאור
אפשר להשתמש ב-chrome.devtools.inspectedWindow API כדי ליצור אינטראקציה עם החלון שנבדק: לקבל את מזהה הכרטיסייה של הדף שנבדק, להעריך את הקוד בהקשר של החלון שנבדק, לטעון מחדש את הדף או לקבל את רשימת המשאבים בדף.
במאמר סיכום של ממשקי DevTools API יש מבוא כללי לשימוש בממשקי API של כלים למפתחים.
המאפיין tabId מספק את מזהה הכרטיסייה שבו אפשר להשתמש בקריאות ל-API של chrome.tabs.*. עם זאת, חשוב לשים לב ש-chrome.tabs.* API לא נחשף לדפי התוסף של כלי הפיתוח משיקולי אבטחה – תצטרכו להעביר את מזהה הכרטיסייה לדף הרקע ולהפעיל משם את הפונקציות של chrome.tabs.* API.
אפשר להשתמש בשיטה reload כדי לטעון מחדש את הדף שנבדק. בנוסף, המתקשר יכול לציין מחרוזת של סוכן משתמש שתחליף את ברירת המחדל, סקריפט שיוחדר מוקדם במהלך טעינת הדף או אפשרות לטעינה מחדש של משאבים שנשמרו במטמון.
משתמשים בקריאה getResources ובאירוע onResourceContent כדי לקבל את רשימת המשאבים (מסמכים, גיליונות סגנונות, סקריפטים, תמונות וכו') בדף שנבדק. אפשר להשתמש בשיטות getContent ו-setContent של המחלקה Resource יחד עם האירוע onResourceContentCommitted כדי לתמוך בשינוי של תוכן המשאב, למשל על ידי עורך חיצוני.
מניפסט
הרצת קוד בחלון הבדיקה
השיטה eval מאפשרת לתוספים להריץ קוד JavaScript בהקשר של הדף שנבדק. השיטה הזו יעילה מאוד כשמשתמשים בה בהקשר הנכון, ומסוכנת כשמשתמשים בה בצורה לא הולמת. מומלץ להשתמש בשיטה tabs.executeScript, אלא אם אתם צריכים את הפונקציונליות הספציפית ששיטת eval מספקת.
אלה ההבדלים העיקריים בין השיטות eval ו-tabs.executeScript:
- השיטה
evalלא משתמשת בסביבה מבודדת לקוד שנבדק, ולכן הקוד יכול לגשת למצב JavaScript של החלון שנבדק. כדאי להשתמש בשיטה הזו כשנדרשת גישה למצב JavaScript של הדף שנבדק. - הקשר הביצועי של הקוד שנבדק כולל את Developer Tools console API.
לדוגמה, הקוד יכול להשתמש ב-
inspectוב-$0. - הקוד המוערך עשוי להחזיר ערך שמועבר להתקשרות חזרה של התוסף. הערך שמוחזר חייב להיות אובייקט JSON תקין (יכול להיות שהוא יכיל רק סוגי JavaScript פרימיטיביים והפניות לא מחזוריות לאובייקטים אחרים של JSON). חשוב לנקוט משנה זהירות כשמעבדים את הנתונים שמתקבלים מהדף שנבדק – הקשר הביצועי נשלט למעשה על ידי הדף שנבדק; דף זדוני עלול להשפיע על הנתונים שמוחזרים לתוסף.
שימו לב: דף יכול לכלול כמה הקשרים שונים של הפעלת JavaScript. לכל פריים יש הקשר משלו, בנוסף להקשר נוסף לכל תוסף שמריץ סקריפטים של תוכן באותו פריים.
כברירת מחדל, השיטה eval מופעלת בהקשר של המסגרת הראשית של הדף שנבדק.
השיטה eval מקבלת ארגומנט שני אופציונלי שבאמצעותו אפשר לציין את ההקשר שבו הקוד מוערך. אובייקט options יכול להכיל מפתח אחד או יותר מהמפתחות הבאים:
frameURL- האפשרות הזו משמשת לציון מסגרת שאינה המסגרת הראשית של הדף שנבדק.
contextSecurityOrigin- התג הזה משמש לבחירת הקשר בתוך המסגרת שצוינה בהתאם למקור האינטרנט שלה.
useContentScriptContext- אם הערך הוא true, הסקריפט יופעל באותו הקשר כמו סקריפטים של תוכן התוספים. (שווה לציון מקור האינטרנט של התוסף עצמו כמקור אבטחת ההקשר). אפשר להשתמש בזה כדי להחליף נתונים עם סקריפט התוכן.
דוגמאות
הקוד הבא בודק את הגרסה של jQuery שבה נעשה שימוש בדף שנבדק:
chrome.devtools.inspectedWindow.eval(
"jQuery.fn.jquery",
function(result, isException) {
if (isException) {
console.log("the page is not using jQuery");
} else {
console.log("The page is using jQuery v" + result);
}
}
);
כדי לנסות את ה-API הזה, צריך להתקין את הדוגמאות ל-API של כלי הפיתוח ממאגר chrome-extension-samples.
סוגים
Resource
משאב בדף שנבדק, כמו מסמך, סקריפט או תמונה.
מאפיינים
-
כתובת אתר
מחרוזת
כתובת ה-URL של המשאב.
-
getContent
void
מקבל את התוכן של המשאב.
הפונקציה
getContentנראית כך:(callback: function) => {...}
-
callback
פונקציה
הפרמטר
callbackנראה כך:(content: string, encoding: string) => void
-
תוכן
מחרוזת
תוכן המשאב (יכול להיות שהוא מקודד).
-
קידוד
מחרוזת
השדה ריק אם התוכן לא מקודד, אחרת מופיע בו שם הקידוד. בשלב הזה יש תמיכה רק ב-base64.
-
-
-
setContent
void
מגדיר את התוכן של המשאב.
הפונקציה
setContentנראית כך:(content: string, commit: boolean, callback?: function) => {...}
-
תוכן
מחרוזת
תוכן חדש של המקור. בשלב הזה יש תמיכה רק במשאבים מסוג טקסט.
-
להוריד לביצוע (Commit)
בוליאני
הערך הוא True אם המשתמש סיים לערוך את המשאב, והתוכן החדש של המשאב צריך להישמר. הערך הוא False אם מדובר בשינוי קל שנשלח במהלך העריכה של המשאב על ידי המשתמש.
-
callback
פונקציה אופציונלית
הפרמטר
callbackנראה כך:(error?: object) => void
-
error
אובייקט אופציונלי
הערך הוא undefined אם תוכן המשאב הוגדר בהצלחה, אחרת מתואר כאן סוג השגיאה.
-
-
מאפיינים
tabId
המזהה של הכרטיסייה שנבדקת. יכול להיות שייעשה שימוש במזהה הזה עם chrome.tabs.* API.
סוג
number
Methods
eval()
chrome.devtools.inspectedWindow.eval(
expression: string,
options?: object,
callback?: function,
): void
הכלי מעריך ביטוי JavaScript בהקשר של המסגרת הראשית של הדף שנבדק. הביטוי חייב להניב אובייקט תואם JSON, אחרת מוצג חריג. הפונקציה eval יכולה לדווח על שגיאה בצד DevTools או על חריגה ב-JavaScript שמתרחשת במהלך ההערכה. בכל מקרה, הפרמטר result של הקריאה החוזרת (callback) הוא undefined. במקרה של שגיאה בצד כלי הפיתוח, הפרמטר isException לא ריק, הערך של isError הוא true והערך של code הוא קוד שגיאה. במקרה של שגיאת JavaScript, הערך של isException מוגדר כ-true והערך של value מוגדר כערך המחרוזת של האובייקט שהושלך.
פרמטרים
-
ביטוי
מחרוזת
ביטוי להערכה.
-
options
אובייקט אופציונלי
הפרמטר options יכול להכיל אפשרות אחת או יותר.
-
frameURL
מחרוזת אופציונלי
אם מציינים ביטוי, הוא מוערך ב-iframe שכתובת ה-URL שלו תואמת לכתובת ה-URL שצוינה. כברירת מחדל, הביטוי מוערך במסגרת העליונה של הדף שנבדק.
-
scriptExecutionContext
מחרוזת אופציונלי
Chrome 107 ואילךהערכת הביטוי בהקשר של סקריפט תוכן של תוסף שתואם למקור שצוין. אם מציינים ערך, scriptExecutionContext מבטל את ההגדרה 'true' ב-useContentScriptContext.
-
useContentScriptContext
boolean אופציונלי
הערכת הביטוי בהקשר של סקריפט התוכן של התוסף שקורא לפונקציה, בתנאי שסקריפט התוכן כבר הוחדר לדף שנבדק. אם לא, הביטוי לא מוערך והקריאה החוזרת מופעלת עם פרמטר החריגה שמוגדר לאובייקט שבו השדה
isErrorמוגדר ל-true והשדהcodeמוגדר ל-E_NOTFOUND.
-
-
callback
פונקציה אופציונלית
הפרמטר
callbackנראה כך:(result: object, exceptionInfo: object) => void
-
תוצאה
אובייקט
תוצאת ההערכה.
-
exceptionInfo
אובייקט
אובייקט שמספק פרטים אם התרחשה חריגה במהלך הערכת הביטוי.
-
קוד
מחרוזת
הגדרה אם השגיאה התרחשה בצד של כלי הפיתוח לפני שהביטוי הוערך.
-
תיאור
מחרוזת
הגדרה אם השגיאה התרחשה בצד של כלי הפיתוח לפני שהביטוי הוערך.
-
פרטים
כל[]
הערך מוגדר אם השגיאה התרחשה בצד של כלי הפיתוח לפני שהביטוי הוערך. הוא מכיל את מערך הערכים שאפשר להציב במחרוזת התיאור כדי לספק מידע נוסף על הגורם לשגיאה.
-
isError
בוליאני
הגדרה אם השגיאה התרחשה בצד של כלי הפיתוח לפני שהביטוי הוערך.
-
isException
בוליאני
הגדרת האפשרות אם הקוד המוערך יוצר חריגה לא מטופלת.
-
ערך
מחרוזת
הגדרת האפשרות אם הקוד המוערך יוצר חריגה לא מטופלת.
-
-
getResources()
chrome.devtools.inspectedWindow.getResources(
callback: function,
): void
אחזור רשימת המשאבים מהדף שנבדק.
פרמטרים
reload()
chrome.devtools.inspectedWindow.reload(
reloadOptions?: object,
): void
טעינה מחדש של הדף שנבדק.
פרמטרים
-
reloadOptions
אובייקט אופציונלי
-
ignoreCache
boolean אופציונלי
אם הערך הוא true, טוען התגים ידלג על המטמון עבור כל משאבי הדף שנבדקו ונטענו לפני שהופעל האירוע
load. האפקט דומה ללחיצה על Ctrl+Shift+R בחלון שנבדק או בחלון של הכלים למפתחים. -
injectedScript
מחרוזת אופציונלי
אם מציינים סקריפט, הוא מוזרק לכל מסגרת בדף שנבדק מיד עם הטעינה, לפני כל אחד מהסקריפטים של המסגרת. הסקריפט לא יוזרק אחרי טעינות מחדש עוקבות – לדוגמה, אם המשתמש יקיש על Ctrl+R.
-
userAgent
מחרוזת אופציונלי
אם מציינים מחרוזת, היא תבטל את הערך של כותרת ה-HTTP
User-Agentשנשלחת בזמן טעינת המשאבים של הדף שנבדק. המחרוזת גם תחליף את הערך של המאפייןnavigator.userAgentשמוחזר לכל סקריפט שפועל בדף שנבדק.
-
אירועים
onResourceAdded
chrome.devtools.inspectedWindow.onResourceAdded.addListener(
callback: function,
)
מופעל כשמוסיפים משאב חדש לדף שנבדק.
onResourceContentCommitted
chrome.devtools.inspectedWindow.onResourceContentCommitted.addListener(
callback: function,
)
האירוע מופעל כשמתבצעת שמירה של עדכון חדש של המשאב (למשל, כשמשתמש שומר גרסה ערוכה של המשאב בכלי הפיתוח).