สิทธิ์ "activeTab" ช่วยให้ส่วนขยายมีสิทธิ์เข้าถึงแท็บที่ใช้งานอยู่ในปัจจุบันชั่วคราวเมื่อผู้ใช้เรียกใช้ส่วนขยาย เช่น โดยการคลิกการดำเนินการ สิทธิ์เข้าถึงแท็บจะคงอยู่ขณะที่ผู้ใช้อยู่ในหน้านั้น และจะถูกเพิกถอนเมื่อผู้ใช้ออกจากหน้าหรือปิดแท็บ
เช่น หากผู้ใช้เรียกใช้ส่วนขยายใน https://example.com แล้วไปยัง https://example.com/foo ส่วนขยายจะยังคงเข้าถึงหน้าเว็บได้ต่อไป หากผู้ใช้ไปยัง https://chromium.org ระบบจะเพิกถอนสิทธิ์เข้าถึง
ซึ่งเป็นทางเลือกสำหรับการใช้งาน "<all_urls>" หลายอย่าง แต่ไม่มีข้อความเตือนระหว่างการติดตั้ง
ไม่มี "activeTab":

เมื่อใช้ "activeTab"

ระบบจะไม่ให้สิทธิ์เข้าถึงหน้าเว็บที่ถูกจำกัด เช่น หน้า chrome://
ตัวอย่าง
ดูตัวอย่างส่วนขยาย Page Redder
manifest.json:
{
"name": "Page Redder",
"version": "2.0",
"permissions": [
"activeTab",
"scripting"
],
"background": {
"service_worker": "service-worker.js"
},
"action": {
"default_title": "Make this page red"
},
"manifest_version": 3
}
service-worker:
function reddenPage() {
document.body.style.backgroundColor = 'red';
}
browser.action.onClicked.addListener((tab) => {
// If the tab URL is not set, it is a restricted page.
if (tab.url) {
browser.scripting.executeScript({
target: { tabId: tab.id },
func: reddenPage
});
}
});
แรงจูงใจ
ลองพิจารณาส่วนขยายการคลิปเว็บที่มีการดำเนินการและรายการเมนูตามบริบท ส่วนขยายนี้อาจจำเป็นต้องเข้าถึงแท็บเมื่อมีการคลิกการดำเนินการ หรือเมื่อมีการเรียกใช้รายการเมนูตามบริบทเท่านั้น
หากไม่มี "activeTab" ส่วนขยายนี้จะต้องขอสิทธิ์เข้าถึงแบบถาวรอย่างเต็มรูปแบบในทุกเว็บไซต์ เพื่อให้ทำงานได้หากผู้ใช้เรียกใช้ ซึ่งถือเป็นความสามารถที่มากเกินไปสำหรับส่วนขยายที่เรียบง่ายเช่นนี้ และหากส่วนขยายถูกบุกรุก ผู้โจมตีจะเข้าถึงทุกอย่างที่ส่วนขยายมี
ในทางตรงกันข้าม ส่วนขยายที่มีสิทธิ์ "activeTab" จะได้รับสิทธิ์เข้าถึงแท็บเพื่อตอบสนองต่อท่าทางผู้ใช้ที่ชัดเจนเท่านั้น หากส่วนขยายถูกบุกรุก ผู้โจมตีจะต้องรอให้ผู้ใช้เรียกใช้ส่วนขยายก่อนจึงจะได้รับสิทธิ์เข้าถึง และสิทธิ์เข้าถึงดังกล่าวจะคงอยู่จนกว่าจะมีการไปยังส่วนต่างๆ ของแท็บหรือปิดแท็บ
สิ่งที่ "activeTab" อนุญาต
ขณะที่เปิดใช้สิทธิ์ "activeTab" สำหรับแท็บ ส่วนขยายจะทำสิ่งต่อไปนี้ได้
- เรียกใช้
scripting.insertCSS()หรือscripting.executeScript()ในแท็บนั้นหากมีการประกาศสิทธิ์"scripting"ด้วย (ดังตัวอย่างด้านบน) - รับ URL, ชื่อ และไอคอน Fav สำหรับแท็บนั้นผ่าน API ที่แสดงผลออบเจ็กต์
tabs.Tab(โดยพื้นฐานแล้ว"activeTab"จะให้สิทธิ์เข้าถึงโฮสต์ชั่วคราว) - สกัดกั้นคำขอเครือข่ายในแท็บไปยังต้นทางเฟรมหลักของแท็บโดยใช้ webRequest API ส่วนขยายจะได้รับสิทธิ์เข้าถึงโฮสต์ชั่วคราวสำหรับต้นทางเฟรมหลักของแท็บ
การเรียกใช้ activeTab
ท่าทางผู้ใช้ต่อไปนี้จะเปิดใช้สิทธิ์ "activeTab"
- การดำเนินการการกระทำ
- การเรียกใช้รายการเมนูตามบริบท
- การใช้แป้นพิมพ์ลัดจาก commands API
- การยอมรับคำแนะนำจาก omnibox API