คำอธิบาย
ใช้ chrome.permissions
API เพื่อขอสิทธิ์ที่ไม่บังคับที่ประกาศไว้ขณะรันไทม์แทนเวลาที่ติดตั้ง เพื่อให้ผู้ใช้เข้าใจว่าทำไมต้องใช้สิทธิ์ดังกล่าวและให้สิทธิ์เฉพาะที่จำเป็นเท่านั้น
ภาพรวม
คำเตือนเกี่ยวกับสิทธิ์มีไว้เพื่ออธิบายความสามารถที่ได้รับจาก API แต่คำเตือนบางส่วนอาจไม่ชัดเจน Permissions API ช่วยให้นักพัฒนาซอฟต์แวร์อธิบายคำเตือนเกี่ยวกับสิทธิ์ได้และค่อยๆ แนะนำฟีเจอร์ใหม่ๆ ซึ่งจะช่วยให้ผู้ใช้ได้รู้จักส่วนขยายดังกล่าวโดยปราศจากความเสี่ยง วิธีนี้จะช่วยให้ผู้ใช้ระบุจำนวนสิทธิ์เข้าถึงที่ต้องการมอบให้และฟีเจอร์ที่ต้องการเปิดใช้ได้
ตัวอย่างเช่น ฟังก์ชันหลักของส่วนขยายสิทธิ์ที่ไม่บังคับจะลบล้างหน้าแท็บใหม่ ฟีเจอร์หนึ่งคือการแสดงเป้าหมายประจำวันของผู้ใช้ ฟีเจอร์นี้ต้องใช้สิทธิ์พื้นที่เก็บข้อมูลเท่านั้น ซึ่งไม่รวมคำเตือน ส่วนขยายมีฟีเจอร์เพิ่มเติมที่ผู้ใช้สามารถเปิดใช้งานได้โดยคลิกปุ่มต่อไปนี้
การแสดงเว็บไซต์ยอดนิยมของผู้ใช้ต้องมีสิทธิ์ topSites ซึ่งจะมีคำเตือนต่อไปนี้
การใช้สิทธิ์เสริม
ขั้นตอนที่ 1: ตัดสินใจว่าสิทธิ์ใดที่จำเป็นและสิทธิ์ใดที่ไม่บังคับ
ส่วนขยายสามารถประกาศทั้งสิทธิ์ที่จำเป็นและไม่บังคับ โดยทั่วไป คุณควรทำดังนี้
- ใช้สิทธิ์ที่จำเป็นเมื่อจำเป็นสำหรับฟังก์ชันการทำงานพื้นฐานของส่วนขยาย
- ใช้สิทธิ์เสริมเมื่อจำเป็นต้องใช้สำหรับฟีเจอร์เสริมในส่วนขยาย
ประโยชน์ของสิทธิ์ที่จำเป็น
- แสดงข้อความแจ้งน้อยลง: ส่วนขยายอาจแจ้งให้ผู้ใช้ยอมรับสิทธิ์ทั้งหมดเพียงครั้งเดียว
- การพัฒนาที่ง่ายขึ้น: รับประกันได้ว่าจะมีสิทธิ์ที่จำเป็นอยู่
ประโยชน์ของสิทธิ์แบบไม่บังคับมีดังนี้
- ความปลอดภัยที่ดีขึ้น: ส่วนขยายจะทำงานโดยมีสิทธิ์น้อยกว่าเนื่องจากผู้ใช้เปิดใช้เฉพาะสิทธิ์ที่จำเป็นเท่านั้น
- ข้อมูลที่ดีขึ้นสำหรับผู้ใช้: ส่วนขยายสามารถอธิบายเหตุผลที่จำเป็นต้องขอสิทธิ์หนึ่งๆ เมื่อผู้ใช้เปิดใช้ฟีเจอร์ที่เกี่ยวข้อง
- อัปเกรดได้ง่ายขึ้น: เมื่อคุณอัปเกรดส่วนขยาย Chrome จะไม่ปิดใช้สำหรับผู้ใช้หากการอัปเกรดนั้นเพิ่มสิทธิ์ที่ไม่บังคับแทนสิทธิ์ที่จำเป็น
ขั้นตอนที่ 2: ประกาศสิทธิ์ที่ไม่บังคับในไฟล์ Manifest
ประกาศสิทธิ์ที่ไม่บังคับในไฟล์ Manifest ของส่วนขยายด้วยคีย์ optional_permissions
โดยใช้รูปแบบเดียวกับช่องสิทธิ์ ดังนี้
{
"name": "My extension",
...
"optional_permissions": ["tabs"],
"optional_host_permissions": ["https://www.google.com/"],
...
}
หากต้องการขอโฮสต์ที่คุณพบขณะรันไทม์เท่านั้น ให้ใส่ "https://*/*"
ในช่อง optional_host_permissions
ของส่วนขยาย ซึ่งช่วยให้คุณระบุต้นทางใน Permissions.origins ได้ตราบใดที่ต้นทางนั้นมีรูปแบบที่ตรงกัน
สิทธิ์ที่ไม่ระบุเป็นไม่บังคับได้
สิทธิ์ของส่วนขยาย Chrome ส่วนใหญ่สามารถระบุเป็นแบบไม่บังคับ โดยมีข้อยกเว้นต่อไปนี้
สิทธิ์ | คำอธิบาย |
---|---|
"debugger" |
API chrome.debugger ทำหน้าที่เป็นการส่งสำรองสำหรับโปรโตคอลการแก้ไขข้อบกพร่องระยะไกลของ Chrome |
"declarativeNetRequest" |
มอบสิทธิ์เข้าถึง chrome.declarativeNetRequest API แก่ส่วนขยาย |
"devtools" |
อนุญาตให้ส่วนขยายขยายฟังก์ชันการทำงานของเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome |
"experimental" |
สำหรับ Canary และเวอร์ชันที่กำลังพัฒนาเท่านั้น ให้สิทธิ์เข้าถึง API chrome.experimental กับส่วนขยาย |
"geolocation" |
อนุญาตให้ส่วนขยายใช้ API geolocationของ HTML5 |
"mdns" |
มอบสิทธิ์เข้าถึง API chrome.mdns ให้กับส่วนขยาย |
"proxy" |
ให้สิทธิ์เข้าถึง chrome.proxy API แก่ส่วนขยายเพื่อจัดการการตั้งค่าพร็อกซีของ Chrome |
"tts" |
API chrome.tts เล่นการอ่านออกเสียงข้อความ (TTS) ที่มีการสังเคราะห์ |
"ttsEngine" |
API chrome.ttsEngine ใช้เครื่องมืออ่านออกเสียงข้อความ (TTS) โดยใช้ส่วนขยาย |
"wallpaper" |
ChromeOS เท่านั้น ใช้ chrome.wallpaper API เปลี่ยนวอลเปเปอร์ของ ChromeOS |
ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ที่มีอยู่และคำเตือนของผู้ใช้ได้ที่ประกาศสิทธิ์และเตือนผู้ใช้
ขั้นตอนที่ 3: ขอสิทธิ์ที่ไม่บังคับ
ขอสิทธิ์จากภายในท่าทางสัมผัสของผู้ใช้โดยใช้ permissions.request()
ดังนี้
document.querySelector('#my-button').addEventListener('click', (event) => {
// Permissions must be requested from inside a user gesture, like a button's
// click handler.
chrome.permissions.request({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (granted) => {
// The callback argument will be true if the user granted the permissions.
if (granted) {
doSomething();
} else {
doSomethingElse();
}
});
});
Chrome จะแจ้งผู้ใช้หากการเพิ่มสิทธิ์ส่งผลให้มีข้อความเตือนที่ต่างจากที่ผู้ใช้เคยเห็นและยอมรับแล้ว ตัวอย่างเช่น โค้ดก่อนหน้านี้อาจทำให้เกิดข้อความแจ้งแบบนี้
ขั้นตอนที่ 4: ตรวจสอบสิทธิ์ปัจจุบันของส่วนขยาย
หากต้องการตรวจสอบว่าส่วนขยายมีสิทธิ์หรือชุดสิทธิ์ที่เฉพาะเจาะจงหรือไม่ ให้ใช้ permission.contains()
chrome.permissions.contains({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (result) => {
if (result) {
// The extension has the permissions.
} else {
// The extension doesn't have the permissions.
}
});
ขั้นตอนที่ 5: นำสิทธิ์ออก
คุณควรนำสิทธิ์ออกเมื่อไม่ต้องใช้แล้ว หลังจากนำสิทธิ์ออกแล้ว โดยปกติแล้ว การเรียกใช้ permissions.request()
จะเพิ่มสิทธิ์กลับเข้ามาโดยไม่ต้องแจ้งผู้ใช้
chrome.permissions.remove({
permissions: ['tabs'],
origins: ['https://www.google.com/']
}, (removed) => {
if (removed) {
// The permissions have been removed.
} else {
// The permissions have not been removed (e.g., you tried to remove
// required permissions).
}
});
ประเภท
Permissions
พร็อพเพอร์ตี้
-
ต้นทาง
string[] ไม่บังคับ
รายการสิทธิ์ของโฮสต์ ซึ่งรวมถึงสิทธิ์ที่ระบุในคีย์
optional_permissions
หรือpermissions
ในไฟล์ Manifest และสิทธิ์ที่เกี่ยวข้องกับสคริปต์เนื้อหา -
สิทธิ์
string[] ไม่บังคับ
รายการสิทธิ์ที่มีชื่อ (ไม่รวมโฮสต์หรือต้นทาง)
วิธีการ
contains()
chrome.permissions.contains(
permissions: Permissions,
callback?: function,
)
ตรวจสอบว่าส่วนขยายมีสิทธิ์ที่ระบุหรือไม่
พารามิเตอร์
-
สิทธิ์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(result: boolean) => void
-
ผลลัพธ์
boolean
เป็นจริงหากส่วนขยายมีสิทธิ์ที่ระบุ หากระบุต้นทางเป็นทั้งสิทธิ์ที่ไม่บังคับและรูปแบบการจับคู่สคริปต์เนื้อหา ระบบจะแสดงผล
false
เว้นแต่จะได้รับสิทธิ์ทั้ง 2 รายการ
-
การคืนสินค้า
-
Promise<boolean>
Chrome 96 ขึ้นไปPromiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ
getAll()
chrome.permissions.getAll(
callback?: function,
)
รับชุดสิทธิ์ปัจจุบันของส่วนขยาย
พารามิเตอร์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(permissions: Permissions) => void
-
สิทธิ์
สิทธิ์ที่ใช้งานอยู่ของส่วนขยาย โปรดทราบว่าพร็อพเพอร์ตี้
origins
จะมีต้นทางที่ได้รับมาจากซึ่งระบุไว้ในคีย์permissions
และoptional_permissions
ในไฟล์ Manifest และต้นทางที่เชื่อมโยงกับสคริปต์เนื้อหา
-
การคืนสินค้า
-
สัญญา<Permissions>
Chrome 96 ขึ้นไปPromiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ
remove()
chrome.permissions.remove(
permissions: Permissions,
callback?: function,
)
ยกเลิกสิทธิ์เข้าถึงสิทธิ์ที่ระบุ หากเกิดปัญหาในการนำสิทธิ์ออก ระบบจะตั้งค่า runtime.lastError
พารามิเตอร์
-
สิทธิ์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(removed: boolean) => void
-
ถูกลบทิ้ง
boolean
เป็นจริงหากนำสิทธิ์ออก
-
การคืนสินค้า
-
Promise<boolean>
Chrome 96 ขึ้นไปPromiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ
request()
chrome.permissions.request(
permissions: Permissions,
callback?: function,
)
ขอสิทธิ์เข้าถึงสิทธิ์ที่ระบุ โดยแสดงข้อความแจ้งให้ผู้ใช้ทราบหากจำเป็น สิทธิ์เหล่านี้ต้องกำหนดในช่อง optional_permissions
ของไฟล์ Manifest หรือเป็นสิทธิ์ที่จำเป็นที่ผู้ใช้ระงับ ระบบจะไม่สนใจเส้นทางในรูปแบบต้นทาง คุณขอชุดย่อยของสิทธิ์ต้นทางที่ไม่บังคับได้ เช่น หากระบุ *://*\/*
ในส่วน optional_permissions
ของไฟล์ Manifest คุณจะขอ http://example.com/
ได้ หากมีปัญหาในการขอสิทธิ์ ระบบจะตั้งค่า runtime.lastError
พารามิเตอร์
-
สิทธิ์
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(granted: boolean) => void
-
อนุญาต
boolean
เป็นจริงหากผู้ใช้ให้สิทธิ์ที่ระบุ
-
การคืนสินค้า
-
Promise<boolean>
Chrome 96 ขึ้นไปPromiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ
กิจกรรม
onAdded
chrome.permissions.onAdded.addListener(
callback: function,
)
เริ่มทำงานเมื่อส่วนขยายได้รับสิทธิ์ใหม่
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(permissions: Permissions) => void
-
สิทธิ์
-
onRemoved
chrome.permissions.onRemoved.addListener(
callback: function,
)
เริ่มทำงานเมื่อนำสิทธิ์การเข้าถึงออกจากส่วนขยายแล้ว
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(permissions: Permissions) => void
-
สิทธิ์
-