chrome.permissions

คำอธิบาย

ใช้ chrome.permissions API เพื่อขอสิทธิ์ที่ไม่บังคับที่ประกาศไว้ขณะรันไทม์แทนเวลาที่ติดตั้ง เพื่อให้ผู้ใช้เข้าใจว่าทำไมต้องใช้สิทธิ์ดังกล่าวและให้สิทธิ์เฉพาะที่จำเป็นเท่านั้น

แนวคิดและการใช้งาน

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

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

ปุ่มส่วนขยายที่ช่วยเปิดใช้ฟีเจอร์เพิ่มเติม
ปุ่มส่วนขยายที่เปิดใช้ฟีเจอร์เพิ่มเติม

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

คําเตือนความเข้มงวดสำหรับ topSites API
คำเตือนเกี่ยวกับส่วนขยายสำหรับ topSites API

ใช้สิทธิ์ที่ไม่บังคับ

ขั้นตอนที่ 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
"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 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

getAll()

สัญญา
chrome.permissions.getAll(
  callback?: function,
)

รับชุดสิทธิ์ปัจจุบันของส่วนขยาย

พารามิเตอร์

  • Callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    (permissions: Permissions)=>void

    • สิทธิ์

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

การคืนสินค้า

  • สัญญา<Permissions>

    Chrome 96 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

remove()

สัญญา
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)

ยกเลิกสิทธิ์เข้าถึงสิทธิ์ที่ระบุ หากเกิดปัญหาในการนำสิทธิ์ออก ระบบจะตั้งค่า runtime.lastError

พารามิเตอร์

  • สิทธิ์
  • Callback

    ฟังก์ชัน ไม่บังคับ

    พารามิเตอร์ callback มีลักษณะดังนี้

    (removed: boolean)=>void

    • ถูกลบทิ้ง

      boolean

      เป็นจริงหากนำสิทธิ์ออก

การคืนสินค้า

  • Promise<boolean>

    Chrome 96 ขึ้นไป

    Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

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 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ

กิจกรรม

onAdded

chrome.permissions.onAdded.addListener(
  callback: function,
)

เริ่มทำงานเมื่อส่วนขยายได้รับสิทธิ์ใหม่

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    (permissions: Permissions)=>void

onRemoved

chrome.permissions.onRemoved.addListener(
  callback: function,
)

เริ่มทำงานเมื่อนำสิทธิ์การเข้าถึงออกจากส่วนขยายแล้ว

พารามิเตอร์

  • Callback

    ฟังก์ชัน

    พารามิเตอร์ callback มีลักษณะดังนี้

    (permissions: Permissions)=>void