การแก้ไขข้อบกพร่องของส่วนขยาย

ส่วนขยายสามารถใช้ประโยชน์จากสิทธิประโยชน์ในการแก้ไขข้อบกพร่องแบบเดียวกันกับที่เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome มีให้สำหรับหน้าเว็บ แต่มีคุณสมบัติลักษณะการทำงานที่ไม่เหมือนใคร การเป็นผู้เชี่ยวชาญด้านการแก้ไขข้อบกพร่องของส่วนขยายต้องอาศัยความเข้าใจลักษณะการทำงานเหล่านี้ วิธีที่คอมโพเนนต์ของส่วนขยายทำงานร่วมกัน และจุดที่ควรตรวจสอบข้อบกพร่อง บทแนะนำนี้จะช่วยให้นักพัฒนาแอปมีความเข้าใจพื้นฐานเกี่ยวกับการแก้ไขข้อบกพร่องของส่วนขยาย

ค้นหาบันทึก

ส่วนขยายประกอบด้วยคอมโพเนนต์ต่างๆ มากมาย และคอมโพเนนต์เหล่านี้มีหน้าที่รับผิดชอบของแต่ละรายการ ดาวน์โหลดส่วนขยายที่ใช้งานไม่ได้ที่นี่เพื่อเริ่มค้นหาบันทึกข้อผิดพลาดสำหรับคอมโพเนนต์ส่วนขยายต่างๆ

สคริปต์พื้นหลัง

ไปที่หน้าการจัดการส่วนขยาย Chrome ที่ chrome://extensions และตรวจสอบว่าโหมดนักพัฒนาซอฟต์แวร์ เปิดอยู่ คลิกปุ่มโหลดที่ไม่ได้แพ็ก แล้วเลือกไดเรกทอรีส่วนขยายที่เสีย หลังจากโหลดส่วนขยายแล้ว ส่วนขยายควรมีปุ่ม 3 ปุ่ม ได้แก่ รายละเอียด นำออก และข้อผิดพลาดเป็นตัวอักษรสีแดง

รูปภาพแสดงปุ่มข้อผิดพลาดในหน้าการจัดการส่วนขยาย

คลิกปุ่มข้อผิดพลาดเพื่อดูบันทึกข้อผิดพลาด ระบบส่วนขยายพบปัญหาใน สคริปต์พื้นหลัง

Uncaught TypeError: Cannot read property 'addListener' of undefined

หน้าการจัดการส่วนขยายแสดงข้อผิดพลาดของสคริปต์พื้นหลัง

นอกจากนี้ คุณยังเปิดแผงเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome สำหรับสคริปต์พื้นหลังได้โดยเลือก ลิงก์สีน้ำเงินข้างตรวจสอบมุมมอง

เครื่องมือสำหรับนักพัฒนาเว็บแสดงข้อผิดพลาดของสคริปต์พื้นหลัง

กลับไปที่โค้ด

chrome.runtime.oninstalled.addListener(function() {
  chrome.storage.sync.set({color: '#3aa757'}, function() {
    console.log('The color is green.');
  });
  chrome.declarativeContent.onPageChanged.removeRules(undefined, function() {
    chrome.declarativeContent.onPageChanged.addRules([{
      conditions: [new chrome.declarativeContent.PageStateMatcher({
        pageUrl: {hostEquals: 'developer.chrome.com'},
      })],
      actions: [new chrome.declarativeContent.ShowPageAction()]
    }]);
  });
});

สคริปต์พื้นหลังพยายามรอฟังเหตุการณ์ onInstalled แต่พร็อพเพอร์ตี้ name ต้องมี "I" ตัวพิมพ์ใหญ่ อัปเดตโค้ดเพื่อให้แสดงการเรียกที่ถูกต้อง คลิกปุ่มล้างทั้งหมดที่มุมขวาบน แล้วโหลดส่วนขยายซ้ำ

ป๊อปอัป

ตอนนี้ส่วนขยายเริ่มต้นอย่างถูกต้องแล้ว คุณจึงทดสอบคอมโพเนนต์อื่นๆ ได้ รีเฟรชหน้านี้ หรือ เปิดแท็บใหม่แล้วไปที่หน้าใดก็ได้ใน developer.chrome.com จากนั้นเปิดป๊อปอัปแล้วคลิกสี่เหลี่ยมสีเขียว และ...ไม่มีอะไรเกิดขึ้น

กลับไปที่หน้าการจัดการส่วนขยาย ปุ่มข้อผิดพลาดจะปรากฏขึ้นอีกครั้ง คลิกเพื่อดูบันทึกใหม่

Uncaught ReferenceError: tabs is not defined

หน้าการจัดการส่วนขยายแสดงข้อผิดพลาดในป๊อปอัป

นอกจากนี้ คุณยังดูข้อผิดพลาดของป๊อปอัปได้โดยการตรวจสอบป๊อปอัป

เครื่องมือสำหรับนักพัฒนาเว็บแสดงข้อผิดพลาดของป๊อปอัป

ข้อผิดพลาด tabs is undefined ระบุว่าส่วนขยายไม่ทราบว่าจะแทรกสคริปต์เนื้อหาที่ใด คุณแก้ไขได้โดยเรียกใช้เมธอด tabs.query() แล้วเลือกแท็บที่ใช้งานอยู่

  let changeColor = document.getElementById('changeColor');

  chrome.storage.sync.get('color', function(data) {
    changeColor.style.backgroundColor = data.color;
    changeColor.setAttribute('value', data.color);
  });

  changeColor.onclick = function(element) {
    let color = element.target.value;
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      chrome.tabs.executeScript(
          tabs[0].id,
          {code: 'document.body.style.backgroundColor = color;'});
    });
  };

อัปเดตโค้ด คลิกปุ่มล้างทั้งหมดที่มุมขวาบน แล้วโหลดส่วนขยายซ้ำ

สคริปต์เนื้อหา

รีเฟรชหน้าเว็บ เปิดป๊อปอัป แล้วคลิกช่องสีเขียว และ... ไม่ สีพื้นหลังก็ยังไม่เปลี่ยน อยู่ดี กลับไปที่หน้าการจัดการส่วนขยาย แล้วคุณจะไม่เห็นปุ่มข้อผิดพลาด สาเหตุที่เป็นไปได้มากที่สุดคือ Content Script ซึ่งทำงานภายในหน้าเว็บ

เปิดแผงเครื่องมือสำหรับนักพัฒนาเว็บของหน้าเว็บที่ส่วนขยายพยายามแก้ไข

ข้อผิดพลาดของส่วนขยายที่แสดงในคอนโซลหน้าเว็บ

ระบบจะบันทึกเฉพาะข้อผิดพลาดรันไทม์ console.warning และ console.error ในหน้าการจัดการส่วนขยาย

หากต้องการใช้ DevTools จากภายใน Content Script ให้คลิกลูกศรเมนูแบบเลื่อนลงข้างบนสุด แล้วเลือกส่วนขยาย

Uncaught ReferenceError: tabs is not defined

ข้อผิดพลาดระบุว่าไม่ได้กำหนด color ส่วนขยายอาจส่งตัวแปรไม่ถูกต้อง แก้ไขสคริปต์ที่แทรกเพื่อส่งตัวแปรสีไปยังโค้ด

  {code: 'document.body.style.backgroundColor = "' + color + '";'});

แท็บส่วนขยาย

คุณดูบันทึกสำหรับหน้าส่วนขยายที่แสดงเป็นแท็บ เช่น หน้าการลบล้างและตัวเลือกแบบเต็มหน้า ได้ในคอนโซลหน้าเว็บและหน้าการจัดการส่วนขยาย

ตรวจสอบคำขอเครือข่าย

โดยป๊อปอัปมักจะส่งคำขอเครือข่ายที่จำเป็นทั้งหมดก่อนที่แม้แต่นักพัฒนาซอฟต์แวร์ที่เร็วที่สุดจะเปิดเครื่องมือสำหรับนักพัฒนาเว็บได้ หากต้องการดูคำขอเหล่านี้ ให้รีเฟรชจากภายในแผงเครือข่าย ซึ่งจะ โหลดป๊อปอัปซ้ำโดยไม่ปิดแผงเครื่องมือสำหรับนักพัฒนาเว็บ

รีเฟรชภายในแผงเครือข่ายเพื่อดูคำขอเครือข่ายของป๊อปอัป

ประกาศสิทธิ์

แม้ว่าส่วนขยายจะมีขีดความสามารถคล้ายกับหน้าเว็บ แต่ก็มักต้องได้รับสิทธิ์ในการใช้ฟีเจอร์บางอย่าง เช่น คุกกี้ พื้นที่เก็บข้อมูล และ XMLHttpRequest แบบข้ามต้นทาง โปรดดูบทความเกี่ยวกับสิทธิ์และ Chrome API ที่มีเพื่อให้แน่ใจว่าส่วนขยายขอสิทธิ์ที่ถูกต้องในไฟล์ Manifest

  {
    "name": "Broken Background Color",
    "version": "1.0",
    "description": "Fix an Extension!",
    "permissions": [
      "activeTab",
      "declarativeContent",
      "storage"
    ],
    "options_page": "options.html",
    "background": {
      "scripts": ["background.js"],
      "persistent": false
    },
    "page_action": {
      "default_popup": "popup.html",
      "default_icon": {
        "16": "images/get_started16.png",
        "32": "images/get_started32.png",
        "48": "images/get_started48.png",
        "128": "images/get_started128.png"
      }
    },
    "icons": {
      "16": "images/get_started16.png",
      "32": "images/get_started32.png",
      "48": "images/get_started48.png",
      "128": "images/get_started128.png"
    },
    "manifest_version": 2
  }

ขั้นตอนถัดไป

ดูข้อมูลเพิ่มเติมเกี่ยวกับการแก้ไขข้อบกพร่องของส่วนขยายได้ที่การพัฒนาและการแก้ไขข้อบกพร่อง ดูข้อมูลเพิ่มเติม เกี่ยวกับเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ได้โดยอ่านเอกสารประกอบ