תוספים לניפוי באגים

תוספים יכולים לגשת לאותו כלי הפיתוח של Chrome כמו דפי אינטרנט. כדי להפוך למומחים בניפוי באגים בתוספים, תצטרכו לדעת איך לאתר יומנים ושגיאות ברכיבים השונים של התוספים. במדריך הזה מוסבר איך לנפות באגים בתוסף.

לפני שמתחילים

במדריך הזה אנחנו יוצאים מנקודת הנחה שיש לכם ניסיון בסיסי בפיתוח אתרים. מומלץ לקרוא את המאמר יסודות הפיתוח כדי לקבל מבוא לתהליך הפיתוח של התוספים. בקטע עיצוב ממשק המשתמש מוסבר על הרכיבים של ממשק המשתמש שזמינים בתוספים.

ניתוק התוסף

במדריך הזה נראה איך לשבור רכיב אחד של התוסף בכל פעם, ואז נראה איך לתקן אותו. חשוב לזכור לבטל את הבאגים שהוספו בקטע אחד לפני שממשיכים לקטע הבא. קודם כול, מורידים את הדוגמה Broken Color ב-GitHub.

ניפוי באגים במניפסט

קודם כול, נשנה את המפתח "version" ל-"versions" כדי לשבור את קובץ המניפסט:

manifest.json:

{
  "name": "Broken Background Color",
  "version": "1.0",
  "versions": "1.0",
  "description": "Fix an Extension!",
  ...
}

עכשיו ננסה לטעון את התוסף באופן מקומי. תוצג תיבת דו-שיח עם שגיאה שמציינת את הבעיה:

Failed to load extension
Required value version is missing or invalid. It must be between 1-4 dot-separated integers each between 0 and 65536.
Could not load manifest.
תוסף עם מפתח מניפסט לא תקין שמפעיל תיבת דו-שיח עם הודעת שגיאה בזמן הניסיון לטעון אותו.
תיבת דו-שיח עם הודעת שגיאה לגבי מפתח מניפסט לא חוקי.

אם מפתח מניפסט לא תקין, לא ניתן לטעון את התוסף, אבל ב-Chrome מוצגת רמזו לפתרון הבעיה.

מבטלים את השינוי הזה ומזינים הרשאה לא חוקית כדי לראות מה קורה. משנים את ההרשאה "activeTab" לאותיות קטנות "activetab":

manifest.json:

{
  ...
  "permissions": ["activeTab", "scripting", "storage"],
  "permissions": ["activetab", "scripting", "storage"],
  ...
}

שומרים את התוסף ומנסים לטעון אותו שוב. הפעם היא אמורה להיטען בהצלחה. בדף ניהול התוסף יופיעו שלושה לחצנים: פרטים, הסרה ושגיאות. התווית של הלחצן שגיאות הופכת לאדומה אם יש שגיאה. לוחצים על הלחצן שגיאות כדי לראות את השגיאה הבאה:

Permission 'activetab' is unknown or URL pattern is malformed.
לחיצה על לחצן השגיאה והצגת שגיאה
חיפוש הודעת שגיאה בלחיצה על הלחצן 'שגיאות'.

לפני שממשיכים, משנים את ההרשאה חזרה, לוחצים על Clear all (ניקוי הכול) בפינה השמאלית העליונה כדי לנקות את היומנים, וטעון מחדש את התוסף.

לחצן לניקוי הכול
איך מוחקים שגיאות בתוספים.

ניפוי באגים בקובץ השירות (service worker)

איתור יומנים

ה-service worker מגדיר את צבע ברירת המחדל לאחסון ומעדכן אותו ביומן במסוף. כדי להציג את היומן הזה, פותחים את החלונית של כלי הפיתוח ל-Chrome על ידי לחיצה על הקישור הכחול לצד תצוגות בדיקה.

פתיחת כלי הפיתוח של ה-service worker של התוסף.
יומני השירות של ה-service worker בחלונית של כלי הפיתוח ל-Chrome.

איתור שגיאות

נגרום לכשל ב-service worker על ידי שינוי onInstalled לאותיות קטנות oninstalled:

service-worker.js:

// There's a typo in the line below;
// ❌ oninstalled should be ✅ onInstalled.
chrome.runtime.onInstalled.addListener(() => { 
chrome.runtime.oninstalled.addListener(() => { 
  chrome.storage.sync.set({ color: '#3aa757' }, () => {
    console.log('The background color is green.');
  });
});

מרעננים את הדף ולוחצים על שגיאות כדי להציג את יומן השגיאות. השגיאה הראשונה מראה שהשירות לא הצליח להירשם. המשמעות היא שמשהו השתבש במהלך ההפעלה:

Service worker registration failed. Status code: 15.
רישום קובץ השירות נכשל. קוד סטטוס: הודעת שגיאה 15
הודעת השגיאה של רישום קובץ השירות (service worker).

השגיאה בפועל מופיעה אחרי:

Uncaught TypeError: Cannot read properties of undefined (reading 'addListener')
Uncaught TypeError: Cannot read properties of undefined error message
הודעת Uncaught TypeError.

מבטלים את הבאג שהוספנו, לוחצים על ניקוי הכול בפינה השמאלית העליונה וטעון מחדש את התוסף.

בדיקת הסטטוס של ה-service worker

כדי לזהות מתי עובד השירות מתעורר כדי לבצע משימות:

  1. מעתיקים את מזהה התוסף שמופיע מעל 'בדיקת התצוגות'.
    מזהה התוסף בדף 'ניהול תוספים'
    מזהה התוסף בדף 'ניהול תוספים'.
  2. פותחים את קובץ המניפסט בדפדפן. לדוגמה: text chrome-extension://YOUR_EXTENSION_ID/manifest.json
  3. בודקים את הקובץ.
  4. עוברים לחלונית Application.
  5. עוברים לחלונית Service Workers.

כדי לבדוק את הקוד, מפעילים או מפסיקים את ה-service worker באמצעות הקישורים לצד status.

סטטוס של קובץ שירות בחלונית האפליקציה
סטטוס של עובד שירות בחלונית האפליקציות. (אפשר ללחוץ כדי להגדיל את התמונה).

ניפוי באגים בחלון הקופץ

עכשיו, אחרי שהתוסף מופעל כמו שצריך, נבטל את החלונית הקופצת על ידי הוספת תגובה לשורות המודגשות שבהמשך:

popup.js:

...
changeColorButton.addEventListener('click', (event) => {
  const color = event.target.value;

  // Query the active tab before injecting the content script
  chrome.tabs.query({ active: true, currentWindow: true }, (tabs) => { 
    // Use the Scripting API to execute a script
    chrome.scripting.executeScript({
      target: { tabId: tabs[0].id },
      args: [color],
      func: setColor
    });
  });
});

חוזרים לדף ניהול התוספים. הלחצן שגיאות יופיע שוב. לוחצים עליו כדי להציג את היומן החדש. תוצג הודעת השגיאה הבאה:

Uncaught ReferenceError: tabs is not defined
דף ניהול התוספים שבו מוצגת שגיאה בחלון קופץ
הדף 'ניהול תוספים' שבו מוצגת הודעת שגיאה קופצת.

כדי לפתוח את כלי הפיתוח של החלון הקופץ, בודקים את החלון הקופץ.

חלון קופץ עם שגיאה ב-DevTools.
כלי הפיתוח מציגים שגיאה בחלון קופץ.

השגיאה tabs is undefined מציינת שהתוסף לא יודע איפה להחדיר את סקריפט התוכן. כדי לתקן את הבעיה, קוראים לפונקציה tabs.query() ובוחרים בכרטיסייה הפעילה.

כדי לעדכן את הקוד, לוחצים על הלחצן Clear all (ניקוי הכול) בפינה השמאלית העליונה, ואז מעלים מחדש את התוסף.

ניפוי באגים בסקריפטים של תוכן

עכשיו נגרום לשגיאה בסקריפט התוכן על ידי שינוי המשתנה 'color' ל-'colors':

content.js:

...
function setColor(color) {
  // There's a typo in the line below;
  // ❌ colors should be ✅ color.
  document.body.style.backgroundColor = color;
  document.body.style.backgroundColor = colors;
}  

מרעננים את הדף, פותחים את החלון הקופץ ולוחצים על התיבה הירוקה. לא קורה כלום.

אם עוברים לדף 'ניהול התוספים', הלחצן שגיאות לא מופיע. הסיבה לכך היא שרק שגיאות זמן ריצה, console.warning ו-console.error מתועדות בדף 'ניהול התוספים'.

סקריפטים של תוכן פועלים בתוך אתר. כדי למצוא את השגיאות האלה, אנחנו צריכים לבדוק את דף האינטרנט שהתוסף מנסה לשנות:

Uncaught ReferenceError: colors is not defined
שגיאה בתוסף שמוצגת במסוף של דף האינטרנט
שגיאת תוסף מוצגת במסוף של דף האינטרנט.

כדי להשתמש בכלי הפיתוח מתוך סקריפט התוכן, לוחצים על החץ בתפריט הנפתח לצד top ובוחרים את התוסף.

Uncaught ReferenceError: colors is not defined
Uncaught ReferenceError: colors is not defined.

השגיאה אומרת ש-colors לא מוגדר. יכול להיות שהתוסף לא מעביר את המשתנה בצורה נכונה. מתקנים את הסקריפט שהוזן כדי להעביר את משתנה הצבע לקוד.

מעקב אחרי בקשות רשת

לרוב, החלון הקופץ שולח את כל הבקשות הנדרשות לרשת לפני שגם המפתחים המהירים ביותר יכולים לפתוח את DevTools. כדי לראות את הבקשות האלה, צריך לרענן את הדף מתוך חלונית הרשת. הלחצן יטען מחדש את החלון הקופץ בלי לסגור את חלונית DevTools.

כדי לראות בקשות רשת בחלון קופץ, צריך לרענן את חלונית הרשת.
מרעננים בחלונית הרשת כדי להציג בקשות רשת בחלונות קופצים.

הצהרה על הרשאות

לחלק מ-API של תוספים נדרשות הרשאות. מומלץ לעיין במאמר בנושא הרשאות ובמאמר בנושא ממשקי ה-API של Chrome כדי לוודא שהתוסף מבקש את ההרשאות הנכונות במניפסט.

  {
    "name": "Broken Background Color",
    ...
    "permissions": [
      "activeTab",
      "declarativeContent",
      "storage"
    ],
  ...
  }

קריאה נוספת

מידע נוסף על Chrome Devtools זמין במסמכי העזרה.