คำอธิบาย
ใช้ chrome.permissions
API เพื่อขอสิทธิ์ที่ประกาศไว้เพิ่มเติมขณะทำงานแทนเวลาติดตั้ง เพื่อให้ผู้ใช้เข้าใจว่าทำไมต้องใช้สิทธิ์และให้สิทธิ์เฉพาะสิทธิ์ที่จำเป็น
แนวคิดและการใช้งาน
คำเตือนสิทธิ์มีไว้เพื่ออธิบายความสามารถที่ได้รับจาก API แต่คำเตือนบางส่วนอาจไม่ชัดเจน Permissions API ช่วยให้นักพัฒนาซอฟต์แวร์สามารถอธิบายคำเตือนเกี่ยวกับสิทธิ์และค่อยๆ แนะนำฟีเจอร์ใหม่ๆ ได้ ซึ่งทำให้ผู้ใช้ได้รับคำแนะนำเกี่ยวกับส่วนขยายโดยปราศจากความเสี่ยง ด้วยวิธีนี้ ผู้ใช้จะสามารถระบุได้ว่าต้องการให้เปิดใช้งานการเข้าถึงเท่าใด และฟีเจอร์ที่ต้องการเปิดใช้
ตัวอย่างเช่น ฟังก์ชันหลักของส่วนขยายสิทธิ์ที่ไม่บังคับคือการลบล้างหน้าแท็บใหม่ คุณลักษณะหนึ่งแสดงเป้าหมายของผู้ใช้ในแต่ละวัน ฟีเจอร์นี้ต้องใช้สิทธิ์พื้นที่เก็บข้อมูลเท่านั้น โดยไม่มีคำเตือน ส่วนขยายนี้มีฟีเจอร์เพิ่มเติมที่ผู้ใช้สามารถเปิดใช้งานได้โดยคลิกปุ่มต่อไปนี้
การแสดงเว็บไซต์ยอดนิยมของผู้ใช้ต้องมีสิทธิ์ topSites ซึ่งมีคำเตือนดังต่อไปนี้
ใช้สิทธิ์ที่ไม่บังคับ
ขั้นตอนที่ 1: เลือกสิทธิ์ที่จำเป็นและสิทธิ์ที่ไม่บังคับ
ส่วนขยายสามารถประกาศได้ทั้งสิทธิ์ที่จำเป็นและสิทธิ์ที่ไม่บังคับ โดยทั่วไปคุณควรทำดังนี้
- ใช้สิทธิ์ที่จำเป็นเมื่อจำเป็นต้องใช้สำหรับฟังก์ชันการทำงานพื้นฐานของส่วนขยาย
- ใช้สิทธิ์ที่ไม่บังคับเมื่อจำเป็นต้องใช้สำหรับฟีเจอร์เสริมในส่วนขยาย
ข้อดีของสิทธิ์ที่จำเป็นมีดังนี้
- แสดงข้อความแจ้งน้อยลง: ส่วนขยายสามารถแสดงข้อความแจ้งผู้ใช้ 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" |
chrome.debugger API ทำหน้าที่เป็น การส่งอื่นสำหรับการแก้ไขข้อบกพร่องระยะไกลของ Chrome โปรโตคอล |
"declarativeNetRequest" |
ให้สิทธิ์การเข้าถึงส่วนขยายแก่ chrome.declarativeNetRequest API |
"devtools" |
อนุญาตให้ส่วนขยายขยายเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome |
"geolocation" |
อนุญาตให้ส่วนขยายใช้ API ตำแหน่งทางภูมิศาสตร์ของ HTML5 |
"mdns" |
ให้สิทธิ์การเข้าถึงแก่ส่วนขยายไปยัง chrome.mdns API |
"proxy" |
ให้สิทธิ์เข้าถึง chrome.proxy API แก่ส่วนขยายเพื่อจัดการพร็อกซีของ Chrome การตั้งค่า |
"tts" |
chrome.tts API เล่นแบบสังเคราะห์ การอ่านออกเสียงข้อความ (TTS) |
"ttsEngine" |
chrome.ttsEngine API จะใช้ เครื่องมืออ่านออกเสียงข้อความ (TTS) โดยใช้ส่วนขยาย |
"wallpaper" |
ChromeOS เท่านั้น ใช้ API chrome.wallpaper เปลี่ยน 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 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
getAll()
chrome.permissions.getAll(
callback?: function,
)
รับชุดสิทธิ์ปัจจุบันของส่วนขยาย
พารามิเตอร์
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(permissions: Permissions) => void
-
สิทธิ์
สิทธิ์ที่ใช้งานอยู่ของส่วนขยาย โปรดทราบว่าพร็อพเพอร์ตี้
origins
จะมีต้นทางที่ได้รับอนุญาตจากคีย์permissions
และoptional_permissions
ในไฟล์ Manifest และต้นทางที่เชื่อมโยงกับสคริปต์เนื้อหา
-
การคืนสินค้า
-
Promise<Permissions>
Chrome 96 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
remove()
chrome.permissions.remove(
permissions: Permissions,
callback?: function,
)
นำสิทธิ์เข้าถึงสิทธิ์ที่ระบุออก หากพบปัญหาในการนำสิทธิ์ออก ระบบจะตั้งค่า runtime.lastError
พารามิเตอร์
-
สิทธิ์
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(removed: boolean) => void
-
ลบแล้ว
boolean
เป็นจริงหากสิทธิ์ถูกนำออก
-
การคืนสินค้า
-
Promise<boolean>
Chrome 96 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
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 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
กิจกรรม
onAdded
chrome.permissions.onAdded.addListener(
callback: function,
)
เริ่มทำงานเมื่อส่วนขยายได้รับสิทธิ์ใหม่
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(permissions: Permissions) => void
-
สิทธิ์
-
onRemoved
chrome.permissions.onRemoved.addListener(
callback: function,
)
เริ่มทำงานเมื่อมีการนำสิทธิ์การเข้าถึงออกจากส่วนขยาย
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(permissions: Permissions) => void
-
สิทธิ์
-