สรุป
สิ่งที่เปลี่ยนแปลงไป
เริ่มตั้งแต่ Chrome 70 เป็นต้นไป ผู้ใช้จะสามารถจำกัดการเข้าถึงโฮสต์ส่วนขยายไปยังรายการที่กำหนดเองของ หรือกำหนดค่าส่วนขยายจะต้องมีการคลิกเพื่อเข้าถึงหน้าปัจจุบัน
API ใดบ้างที่ได้รับผลกระทบ
การเปลี่ยนแปลงนี้จะส่งผลต่อ API ที่ได้รับผลกระทบจากสิทธิ์ของโฮสต์ที่ระบุไว้ในส่วนขยาย
ไฟล์ Manifest และสคริปต์เนื้อหา API ที่ต้องใช้สิทธิ์ของโฮสต์รวมถึง webRequest
คุกกี้, tabs.executeScript() และ tabs.insertCSS() และดำเนินการแบบข้ามต้นทาง
คำขอ เช่น ผ่าน XMLHTTPRequest
หรือ fetch()
API
กำลังจำกัดการเข้าถึง
ผู้ใช้จะจำกัดการเข้าถึงได้อย่างไร
ผู้ใช้เลือกได้ว่าจะให้ส่วนขยายทำงานเมื่อคลิก ในเว็บไซต์ที่เจาะจง หรือทั้งหมด
เว็บไซต์ที่ขอ ตัวเลือกเหล่านี้จะแสดงแก่ผู้ใช้ในหน้า chrome://extensions
รวมถึง
ในเมนูตามบริบทของส่วนขยาย
จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉัน "เมื่อคลิก"
โดยพื้นฐานแล้ว ส่วนขยายจะทำงานเสมือนว่าใช้สิทธิ์ activeTab ส่วนขยายคือ ได้รับสิทธิ์ชั่วคราวในการเข้าถึงโฮสต์ใดๆ ที่ผู้ใช้คลิกส่วนขยาย หากโฮสต์นั้นร้องขอโดย ส่วนขยาย (และไม่ใช่เว็บไซต์ที่ถูกจำกัด เช่น chrome://settings) เมื่อตั้งค่าให้ทำงานเมื่อคลิก Chrome จะติดป้ายส่วนขยายเป็นวงกลมและเงาตกกระทบ (ดูด้านล่าง) เพื่อบ่งบอกว่าเป็น ที่ขอสิทธิ์เข้าถึงเว็บไซต์ใดเว็บไซต์หนึ่ง
จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉันในบางเว็บไซต์
ส่วนขยายของคุณได้รับอนุญาตให้ทำงานโดยอัตโนมัติในเว็บไซต์ที่ผู้ใช้เลือกไว้ และสามารถเข้าถึง ไซต์โดยที่ผู้ใช้ไม่ต้องดำเนินการใดๆ เพิ่มเติม บนเว็บไซต์อื่นๆ ที่ส่วนขยายของคุณขอ แต่ผู้ใช้ไม่ได้ขอ ได้รับสิทธิ์ ลักษณะการทำงานจะเหมือนกับการที่ผู้ใช้กำหนดให้ส่วนขยายทำงานเมื่อคลิก
จะเกิดอะไรขึ้นหากผู้ใช้เลือกที่จะเรียกใช้ส่วนขยายของฉันในทุกเว็บไซต์
ส่วนขยายสามารถเข้าถึงเว็บไซต์ที่ขอในไฟล์ Manifest โดยอัตโนมัติ
ลักษณะการทำงานของ API
API คำขอเว็บ
ส่วนขยายจะยังคงสกัดกั้น แก้ไข และบล็อกคำขอใดๆ จากเว็บไซต์ที่มีสิทธิ์เข้าถึงได้ สำหรับ ที่ส่วนขยายไม่สามารถเข้าถึงได้ Chrome จะติดป้ายส่วนขยายเพื่อระบุว่า ส่วนขยายจะขอเข้าถึงหน้าเว็บ จากนั้นผู้ใช้จึงจะให้สิทธิ์เข้าถึงส่วนขยายได้ จากนั้น Chrome แจ้งให้ผู้ใช้รีเฟรชหน้าเว็บเพื่อให้ส่วนขยายของคุณสกัดกั้นคำขอของเครือข่ายได้
สคริปต์เนื้อหา, Tab.executeScript(), tabs.insertCSS()
ส่วนขยายยังคงสามารถแทรกสคริปต์และสไตล์ชีตโดยอัตโนมัติสำหรับเว็บไซต์ที่มีสิทธิ์เข้าถึง เป็น สำหรับเว็บไซต์ที่ส่วนขยายไม่มีสิทธิ์เข้าถึง Chrome จะติดป้ายส่วนขยายเพื่อระบุว่า ส่วนขยายจะขอเข้าถึงหน้าเว็บ จากนั้นผู้ใช้จึงจะให้สิทธิ์เข้าถึงส่วนขยายได้ หาก สคริปต์เนื้อหาได้รับการตั้งค่าให้แทรกที่ document_idle โดยสคริปต์จะแทรกทันที หรือไม่เช่นนั้น Chrome จะแจ้งให้ผู้ใช้รีเฟรชหน้าเว็บเพื่อให้ส่วนขยายแทรกสคริปต์ได้เร็วขึ้น การโหลดหน้าเว็บ (ที่ document_start หรือ document_end) Callback สำหรับ tabs.executeScript() และ ระบบจะเรียกใช้เมธอด tabs.insertCSS() ต่อเมื่อผู้ใช้ให้สิทธิ์เข้าถึงเว็บไซต์เท่านั้น
คุกกี้และหน้าพื้นหลัง XHR
ส่วนขยายจะยังคงอ่านและแก้ไขคุกกี้จากและดำเนินการ XHR แบบข้ามต้นทางกับเว็บไซต์ได้ มีสิทธิ์เข้าถึง เนื่องจากไม่มีแท็บที่เชื่อมโยงกับหน้าส่วนขยายที่เข้าถึงต้นทางอื่น คุกกี้หรือ XHRing ไปยังโฮสต์อื่น 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
}
});
การย้ายข้อมูล
แนวทางปฏิบัติแนะนำเพื่อหลีกเลี่ยงการได้รับผลกระทบเชิงลบคืออะไร
ส่วนขยายสามารถใช้ API สิทธิ์ที่ไม่บังคับ, activeTab และ declarativeContent API เพื่อทำตามแนวทางปฏิบัติที่ดีที่สุด ระบบจะให้สิทธิ์ที่ไม่บังคับระหว่างรันไทม์ และอนุญาตให้ส่วนขยาย ขอสิทธิ์การเข้าถึงเว็บไซต์ที่เฉพาะเจาะจง สิทธิ์ activeTab จะไม่ได้รับผลกระทบ และส่วนขยาย และใช้งานต่อได้ตามปกติ declarativeContent API เป็นผลิตภัณฑ์ทดแทนความต้องการจำนวนมาก เพื่อแทรกสคริปต์ลงในทุกหน้า
จะเกิดอะไรขึ้นกับผู้ใช้ปัจจุบัน การตั้งค่า
การเปลี่ยนแปลงนี้จะไม่ส่งผลต่อสิทธิ์ปัจจุบันที่มอบให้ส่วนขยายโดยทันที นั่นคือ โฆษณาจะยังคงทำงานเหมือนเดิม เว้นแต่ผู้ใช้จะดำเนินการเพื่อจำกัดเว็บไซต์ อนุญาตให้เข้าถึง ในรุ่นต่อๆ ไป Chrome จะมีการควบคุมมากขึ้นสำหรับผู้ใช้เพื่อปรับ การตั้งค่า
ฉันจะตรวจสอบได้อย่างไรว่าส่วนขยายของฉันมีสิทธิ์ทำงานบนเว็บไซต์หรือไม่
คุณสามารถใช้ API permissions.contains() เพื่อตรวจสอบว่าส่วนขยายของคุณ ที่ให้สิทธิ์เข้าถึงต้นทางหนึ่งๆ