การควบคุมของผู้ใช้สำหรับสิทธิ์ของโฮสต์: คู่มือการเปลี่ยน

สรุป

สิ่งที่เปลี่ยนแปลงไป

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

มี API ใดบ้างที่ได้รับผลกระทบ

การเปลี่ยนแปลงนี้จะมีผลกับ API ที่ได้รับผลกระทบจากสิทธิ์ของโฮสต์ที่ระบุไว้ในไฟล์ Manifest ของส่วนขยาย รวมถึงสคริปต์เนื้อหา API ที่ต้องใช้สิทธิ์ของโฮสต์ ได้แก่ webRequest, คุกกี้, tabs.executeScript() และ tabs.insertCSS() และการดำเนินการตามคำขอข้ามต้นทาง เช่น ผ่าน XMLHTTPRequest หรือ fetch() API

กำลังจำกัดการเข้าถึง

ผู้ใช้จะจำกัดการเข้าถึงได้อย่างไร

ผู้ใช้สามารถเลือกอนุญาตให้ส่วนขยายทำงานเมื่อคลิก ในเว็บไซต์บางชุด หรือทุกเว็บไซต์ที่ขอ ตัวเลือกเหล่านี้จะปรากฏต่อผู้ใช้ในหน้า chrome://extensions และในเมนูตามบริบทของส่วนขยาย

ภาพหน้าจอของการควบคุมเมนูตามบริบทสำหรับสิทธิ์ของโฮสต์รันไทม์ รวมถึงตัวเลือกในการเรียกใช้ส่วนขยายเมื่อคลิก ในเว็บไซต์หนึ่ง หรือทุกเว็บไซต์

จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉัน "เมื่อคลิก"

โดยพื้นฐานแล้ว ส่วนขยายจะมีลักษณะการทำงานเหมือนกับว่าใช้สิทธิ์ activeTab ส่วนขยายจะได้รับสิทธิ์ชั่วคราวในการเข้าถึงโฮสต์ที่ผู้ใช้คลิกส่วนขยาย หากโฮสต์นั้นร้องขอโดยส่วนขยาย (และไม่ใช่ไซต์ที่ถูกจํากัด เช่น chrome://settings) เมื่อตั้งค่าให้ทำงานเมื่อคลิก Chrome จะติดป้ายส่วนขยายด้วยวงกลมและเงาตกกระทบ (ดูด้านล่าง) เพื่อระบุว่า กำลังขอสิทธิ์เข้าถึงเว็บไซต์ดังกล่าว

ภาพหน้าจอของการแสดงป้าย Chrome ที่เพิ่มลงในไอคอนส่วนขยายในแถบเครื่องมือ

จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉันในบางไซต์

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

จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉันในทุกเว็บไซต์

ส่วนขยายจะเข้าถึงเว็บไซต์ที่ขอในไฟล์ Manifest ได้โดยอัตโนมัติ

ลักษณะการทำงานของ API

API คำขอเว็บ

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

สคริปต์เนื้อหา, tab.executeScript(), tab.insertCSS()

ส่วนขยายจะยังคงแทรกสคริปต์และสไตล์ชีตโดยอัตโนมัติสำหรับเว็บไซต์ทั้งหมดที่ส่วนขยายเข้าถึงได้ สำหรับเว็บไซต์ที่ส่วนขยายไม่มีสิทธิ์เข้าถึง Chrome จะติดป้ายส่วนขยายเพื่อบ่งชี้ว่าส่วนขยายขอสิทธิ์เข้าถึงหน้าเว็บ จากนั้นผู้ใช้จึงจะให้สิทธิ์เข้าถึงส่วนขยายได้ หากมีการตั้งค่าสคริปต์เนื้อหาให้แทรกที่ document_idle สคริปต์จะถูกแทรกทันที ไม่เช่นนั้น Chrome จะแจ้งให้ผู้ใช้รีเฟรชหน้าเว็บเพื่อให้ส่วนขยายแทรกสคริปต์ในการโหลดหน้าเว็บล่วงหน้า (ที่ document_start หรือ document_end) ระบบจะเรียกใช้การเรียกกลับสำหรับเมธอด tabs.executeScript() และ tabs.insertCSS() เฉพาะในกรณีที่ผู้ใช้ให้สิทธิ์เข้าถึงเว็บไซต์

คุกกี้และหน้าพื้นหลัง XHR

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

ตัวอย่างด้านล่างแสดงวิธีที่วิธีนี้อาจทำงานกับ API ของคุกกี้

ก่อน:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

หลัง:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

การย้ายข้อมูล

แนวทางปฏิบัติแนะนำเพื่อหลีกเลี่ยงผลกระทบเชิงลบคืออะไร

ส่วนขยายจะใช้สิทธิ์ที่ไม่บังคับ, activeTab และ API declarativeContent เพื่อปฏิบัติตามแนวทางปฏิบัติแนะนำได้ ระบบจะให้สิทธิ์ที่ไม่บังคับระหว่างรันไทม์ และอนุญาตให้ส่วนขยายขอสิทธิ์เข้าถึงเว็บไซต์แบบเฉพาะเจาะจงได้ สิทธิ์ activeTab จะไม่ได้รับผลกระทบ และส่วนขยายที่ใช้สิทธิ์นี้จะยังคงทำงานได้ตามปกติ declarativeContent API เป็นสิ่งแทนสำหรับความต้องการหลายๆ อย่างเพื่อแทรกสคริปต์ลงในทุกหน้า

จะเกิดอะไรขึ้นกับการตั้งค่าของผู้ใช้ปัจจุบัน

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

ฉันจะตรวจสอบได้อย่างไรว่าส่วนขยายของฉันมีสิทธิ์ทำงานบนเว็บไซต์หรือไม่

คุณสามารถใช้ API permissions.contains() เพื่อตรวจสอบว่าส่วนขยายของคุณได้รับสิทธิ์ในการเข้าถึงต้นทางที่ระบุหรือไม่