chrome.permissions

Nội dung mô tả

Thay vì yêu cầu trong thời gian cài đặt, hãy dùng API chrome.permissions để yêu cầu các quyền không bắt buộc được khai báo trong thời gian chạy, nhờ đó, người dùng nắm được lý do cần có những quyền đó và chỉ cấp những quyền cần thiết.

Khái niệm và cách sử dụng

Cảnh báo về quyền được dùng để mô tả những chức năng mà API cấp, nhưng một số cảnh báo trong số này có thể không rõ ràng. API Quyền cho phép nhà phát triển giải thích các cảnh báo về quyền và dần dần giới thiệu các tính năng mới, qua đó giới thiệu tiện ích này cho người dùng mà không có rủi ro. Bằng cách này, người dùng có thể chỉ định mức độ truy cập mà họ sẵn sàng cấp và những tính năng họ muốn bật.

Ví dụ: chức năng cốt lõi của tiện ích quyền không bắt buộc là ghi đè trang thẻ mới. Một tính năng đang hiển thị mục tiêu trong ngày của người dùng. Tính năng này chỉ yêu cầu quyền bộ nhớ, không kèm theo cảnh báo. Tiện ích này có một tính năng bổ sung mà người dùng có thể bật bằng cách nhấp vào nút sau đây:

Nút tiện ích bật các tính năng bổ sung.
Nút tiện ích cho phép bật các tính năng bổ sung.

Việc hiển thị các trang web hàng đầu của người dùng cần có quyền topSites. Quyền này có cảnh báo sau.

Cảnh báo axtension cho API topSites.
Cảnh báo về tiện ích cho API topSites

Triển khai các quyền không bắt buộc

Bước 1: Xác định những quyền nào là cần thiết và những quyền không bắt buộc

Tiện ích có thể khai báo cả quyền bắt buộc và quyền không bắt buộc. Nói chung, bạn nên:

  • Sử dụng các quyền cần thiết khi cần thiết để thực hiện chức năng cơ bản của tiện ích.
  • Sử dụng các quyền không bắt buộc khi cần cho các tính năng không bắt buộc trong tiện ích của bạn.

Ưu điểm của các quyền bắt buộc:

  • Ít lời nhắc hơn: Tiện ích có thể nhắc người dùng một lần để chấp nhận tất cả các quyền.
  • Phát triển đơn giản hơn: Chúng tôi đảm bảo có các quyền bắt buộc.

Ưu điểm của quyền không bắt buộc:

  • Bảo mật tốt hơn: Tiện ích chạy với ít quyền hơn vì người dùng chỉ cấp các quyền cần thiết.
  • Cung cấp thông tin hữu ích hơn cho người dùng: Tiện ích có thể giải thích lý do tiện ích cần một quyền cụ thể khi người dùng bật tính năng có liên quan.
  • Nâng cấp dễ dàng hơn: Khi bạn nâng cấp tiện ích, Chrome sẽ không tắt tiện ích đó cho người dùng nếu bản nâng cấp thêm các quyền tuỳ chọn thay vì các quyền bắt buộc.

Bước 2: Khai báo quyền không bắt buộc trong tệp kê khai

Khai báo các quyền không bắt buộc trong tệp kê khai tiện ích bằng khoá optional_permissions, sử dụng định dạng giống như trường quyền:

{
  "name": "My extension",
  ...
  "optional_permissions": ["tabs"],
  "optional_host_permissions": ["https://www.google.com/"],
  ...
}

Nếu bạn muốn yêu cầu các máy chủ mà bạn chỉ khám phá trong thời gian chạy, hãy thêm "https://*/*" vào trường optional_host_permissions của tiện ích. Thao tác này cho phép bạn chỉ định mọi nguồn gốc trong "Permissions.origins" miễn là nguồn gốc đó có giao thức phù hợp.

Các quyền có thể không được chỉ định là không bắt buộc

Hầu hết các quyền của tiện ích của Chrome đều có thể được chỉ định là không bắt buộc, với các ngoại lệ sau đây.

Quyền Nội dung mô tả
"debugger" API chrome.debugger đóng vai trò như một công cụ truyền tải thay thế cho giao thức gỡ lỗi từ xa của Chrome.
"declarativeNetRequest" Cấp quyền truy cập vào tiện ích vào API chrome.declarativeNetRequest.
"devtools" Cho phép tiện ích mở rộng chức năng của Công cụ của Chrome cho nhà phát triển.
"geolocation" Cho phép tiện ích sử dụng API geolocation HTML5.
"mdns" Cấp cho tiện ích quyền truy cập vào API chrome.mdns.
"proxy" Cấp cho tiện ích quyền truy cập vào API chrome.proxy để quản lý chế độ cài đặt proxy của Chrome.
"tts" API chrome.tts phát văn bản tổng hợp dưới dạng văn bản dưới dạng lời nói (TTS).
"ttsEngine" API chrome.ttsEngine triển khai công cụ chuyển văn bản sang lời nói (TTS) bằng một tiện ích.
"wallpaper" Chỉ áp dụng cho ChromeOS. Dùng API chrome.wallpaper để thay đổi hình nền ChromeOS.

Vui lòng xem phần Khai báo quyền để biết thêm thông tin về các quyền hiện có và cảnh báo về các quyền đó.

Bước 3: Yêu cầu cấp quyền không bắt buộc

Yêu cầu cấp quyền từ trong cử chỉ của người dùng bằng 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 sẽ nhắc người dùng nếu việc thêm quyền dẫn đến thông báo cảnh báo khác với những gì người dùng đã nhìn thấy và chấp nhận. Ví dụ: mã trước đó có thể dẫn đến lời nhắc như sau:

Ví dụ về lời nhắc xác nhận quyền.
Ví dụ về lời nhắc xác nhận quyền.

Bước 4: Kiểm tra quyền hiện tại của tiện ích

Để kiểm tra xem tiện ích có quyền hoặc nhóm quyền cụ thể hay không, hãy sử dụng 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.
  }
});

Bước 5: Thu hồi quyền

Bạn nên xoá quyền khi không cần đến nữa. Sau khi xoá một quyền, việc gọi permissions.request() thường thêm lại quyền đó mà không nhắc người dùng.

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).
  }
});

Loại

Permissions

Thuộc tính

  • nguồn gốc

    string[] không bắt buộc

    Danh sách quyền của máy chủ, bao gồm những quyền được chỉ định trong khoá optional_permissions hoặc permissions trong tệp kê khai và những quyền được liên kết với Tập lệnh nội dung.

  • quyền

    string[] không bắt buộc

    Danh sách quyền được đặt tên (không bao gồm máy chủ hoặc nguồn gốc).

Phương thức

contains()

Cam kết
chrome.permissions.contains(
  permissions: Permissions,
  callback?: function,
)

Kiểm tra xem tiện ích có các quyền được chỉ định hay không.

Tham số

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (result: boolean)=>void

    • kết quả

      boolean

      Đúng nếu tiện ích có các quyền được chỉ định. Nếu một nguồn gốc được chỉ định vừa là quyền không bắt buộc vừa là mẫu khớp tập lệnh nội dung, thì hàm này sẽ trả về false trừ phi cả hai quyền đều được cấp.

Giá trị trả về

  • Promise<boolean>

    Chrome 96 trở lên

    Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

getAll()

Cam kết
chrome.permissions.getAll(
  callback?: function,
)

Nhận nhóm quyền hiện tại của tiện ích.

Tham số

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (permissions: Permissions)=>void

    • Các quyền đang hoạt động của tiện ích. Lưu ý rằng thuộc tính origins sẽ chứa các nguồn gốc đã cấp từ những nguồn được chỉ định trong khoá permissionsoptional_permissions trong tệp kê khai và những nguồn được liên kết với Tập lệnh nội dung.

Giá trị trả về

  • Hứa hẹn<Quyền>

    Chrome 96 trở lên

    Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

remove()

Cam kết
chrome.permissions.remove(
  permissions: Permissions,
  callback?: function,
)

Xoá quyền truy cập vào các quyền đã chỉ định. Nếu có vấn đề xảy ra khi xoá quyền, runtime.lastError sẽ được đặt.

Tham số

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (removed: boolean)=>void

    • đã xóa

      boolean

      Đúng nếu các quyền đã bị xoá.

Giá trị trả về

  • Promise<boolean>

    Chrome 96 trở lên

    Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

request()

Cam kết
chrome.permissions.request(
  permissions: Permissions,
  callback?: function,
)

Yêu cầu quyền truy cập vào các quyền được chỉ định, hiển thị lời nhắc cho người dùng nếu cần. Các quyền này phải được xác định trong trường optional_permissions của tệp kê khai hoặc là các quyền bắt buộc mà người dùng đã từ chối. Đường dẫn trên mẫu gốc sẽ bị bỏ qua. Bạn có thể yêu cầu các nhóm nhỏ quyền truy cập nguồn gốc không bắt buộc. Ví dụ: nếu chỉ định *://*\/* trong mục optional_permissions của tệp kê khai, bạn có thể yêu cầu http://example.com/. Nếu xảy ra sự cố khi yêu cầu cấp quyền, runtime.lastError sẽ được đặt.

Tham số

  • số gọi lại

    hàm không bắt buộc

    Tham số callback sẽ có dạng như sau:

    (granted: boolean)=>void

    • được cấp

      boolean

      Đúng nếu người dùng đã cấp các quyền được chỉ định.

Giá trị trả về

  • Promise<boolean>

    Chrome 96 trở lên

    Lời hứa được hỗ trợ trong Manifest V3 trở lên nhưng lệnh gọi lại được cung cấp để có khả năng tương thích ngược. Bạn không thể sử dụng cả hai trong cùng một lệnh gọi hàm. Lời hứa sẽ được phân giải bằng cùng một loại được truyền đến lệnh gọi lại.

Sự kiện

onAdded

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

Được kích hoạt khi tiện ích nhận được các quyền mới.

Tham số

onRemoved

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

Được kích hoạt khi quyền truy cập vào các quyền đã bị xoá khỏi tiện ích.

Tham số