Các chế độ kiểm soát của người dùng đối với quyền của người tổ chức: hướng dẫn chuyển đổi

Tóm tắt

Điều gì sẽ thay đổi?

Kể từ Chrome 70, người dùng có thể hạn chế quyền truy cập của máy chủ tiện ích vào danh sách tuỳ chỉnh hoặc để định cấu hình tiện ích yêu cầu nhấp chuột để truy cập được vào trang hiện tại.

Những API nào bị ảnh hưởng?

Thay đổi này ảnh hưởng đến mọi API chịu ảnh hưởng của quyền của máy chủ lưu trữ được chỉ định trong thuộc tính tệp kê khai cũng như tập lệnh nội dung. Các API yêu cầu quyền của máy chủ lưu trữ bao gồm webRequest, cookie, tabs.executeScript()tabs.insertCSS() cũng như thực hiện nhiều nguồn gốc các yêu cầu, chẳng hạn như thông qua API XMLHTTPRequest hoặc fetch().

Đang giới hạn truy cập

Người dùng có thể hạn chế quyền truy cập bằng cách nào?

Người dùng có thể chọn cho phép tiện ích của bạn chạy khi nhấp chuột, trên một nhóm trang web cụ thể hoặc trên tất cả các vị trí các trang web được yêu cầu. Các tuỳ chọn này được trình bày cho người dùng trên trang chrome://extensions cũng như trong trình đơn theo bối cảnh của tiện ích.

Ảnh chụp màn hình các tuỳ chọn điều khiển trình đơn theo bối cảnh đối với quyền của máy chủ trong thời gian chạy,
            bao gồm các tuỳ chọn để chạy tiện ích khi nhấp chuột, trên một trang web cụ thể hoặc trên tất cả các trang web.

Điều gì sẽ xảy ra nếu người dùng chọn chạy tiện ích mở rộng của tôi "khi nhấp chuột"?

Về cơ bản, tiện ích này hoạt động như thể đã sử dụng quyền activeTab. Phần mở rộng là đã cấp quyền truy cập tạm thời cho bất kỳ máy chủ nào mà người dùng nhấp vào tiện ích, nếu máy chủ đó được yêu cầu tiện ích (và không phải là trang web bị hạn chế như chrome://settings). Khi đặt để chạy khi nhấp, Chrome gắn huy hiệu cho tiện ích của bạn bằng một vòng tròn và bóng đổ (xem bên dưới) để cho biết rằng yêu cầu quyền truy cập vào một trang web cụ thể.

Ảnh chụp màn hình huy hiệu mà Chrome thêm vào biểu tượng tiện ích trên thanh công cụ

Điều gì xảy ra nếu người dùng chọn chạy tiện ích của tôi trên các trang web cụ thể?

Tiện ích của bạn được phép tự động chạy trên bất kỳ trang web nào mà người dùng đã chọn và có thể truy cập vào trang web mà không có thêm hành động của người dùng. Trên các trang web khác mà tiện ích của bạn đã yêu cầu, nhưng người dùng không yêu cầu cấp quyền cho, hành vi sẽ giống như thể người dùng đã thiết lập tiện ích để chạy khi nhấp chuột.

Điều gì xảy ra nếu người dùng chọn chạy tiện ích của tôi trên tất cả các trang web?

Tiện ích này có thể tự động truy cập vào mọi trang web được yêu cầu trong tệp kê khai.

Hành vi của API

API yêu cầu web

Tiện ích này vẫn có thể chặn, sửa đổi và chặn mọi yêu cầu từ các trang web mà tiện ích có quyền truy cập. Cho các trang web mà tiện ích không có quyền truy cập, thì Chrome sẽ gắn huy hiệu cho tiện ích đó để cho biết rằng tiện ích yêu cầu quyền truy cập vào trang. Sau đó, người dùng có thể cấp quyền truy cập vào tiện ích đó; Sau đó là Chrome nhắc người dùng làm mới trang để cho phép tiện ích của bạn chặn các yêu cầu mạng.

Các tập lệnh nội dung, tab.executeScript(), tab.insertCSS()

Tiện ích này vẫn có thể tự động chèn tập lệnh và biểu định kiểu cho bất kỳ trang web nào mà nó có quyền truy cập sang. Đối với các trang web mà tiện ích không có quyền truy cập, Chrome sẽ gắn huy hiệu cho tiện ích đó để cho biết rằng tiện ích yêu cầu quyền truy cập vào trang. Sau đó, người dùng có thể cấp quyền truy cập vào tiện ích. Nếu tập lệnh nội dung được đặt để chèn tại document_idle, tập lệnh sẽ chèn ngay lập tức. Nếu không, Chrome nhắc người dùng làm mới trang để cho phép tiện ích chèn tập lệnh sớm hơn vào tải trang (tại document_start hoặc document_end). Các lệnh gọi lại cho tabs.executeScript() và Phương thức tabs.insertCSS() chỉ được gọi nếu người dùng cấp quyền truy cập vào trang web.

Cookie và XHR trang nền

Tiện ích này vẫn có thể đọc và sửa đổi mọi cookie từ đó, cũng như thực hiện XHR trên nhiều nguồn gốc cho các trang web mà tiện ích đó có quyền truy cập. Do không có thẻ nào liên kết với một trang tiện ích truy cập vào các nguồn gốc khác hoặc XHR sang máy chủ lưu trữ khác, thì Chrome không gắn huy hiệu cho tiện ích để cho người dùng biết rằng tiện ích yêu cầu truy cập vào một trang web. Việc cố gắng truy cập vào cookie của một trang web khác hoặc XHR trên nhiều nguồn gốc sẽ không thành công kèm theo lỗi như thể tệp kê khai của tiện ích không bao gồm máy chủ quyền. Đối với những trường hợp này, bạn nên sử dụng các quyền không bắt buộc để cho phép người dùng để cấp quyền truy cập khi bắt đầu chạy vào các trang web khác nhau.

Ví dụ bên dưới minh hoạ cách hoạt động của điều này đối với API cookie.

Trước:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

Sau:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

Di chuyển

Đâu là các phương pháp hay nhất để tránh bị ảnh hưởng tiêu cực?

Tiện ích có thể sử dụng các API quyền không bắt buộc, activeTabdeclarativeContent để làm theo các phương pháp hay nhất. Các quyền không bắt buộc được cấp trong thời gian chạy và cho phép tiện ích yêu cầu quyền truy cập cụ thể vào một trang web. Quyền activeTab và các tiện ích sẽ không bị ảnh hưởng đang sử dụng nó sẽ tiếp tục hoạt động bình thường. declarativeContent API thay thế cho nhiều nhu cầu để chèn tập lệnh vào mỗi trang.

Điều gì sẽ xảy ra với người dùng hiện tại của tôi phần cài đặt?

Thay đổi này sẽ không ảnh hưởng ngay đến bất kỳ quyền hiện tại nào đã cấp cho tiện ích của bạn. Tức là nó sẽ tiếp tục hoạt động như trước đây trừ phi người dùng thực hiện hành động để hạn chế các trang web mà nó được phép truy cập. Trong các bản phát hành sau này, Chrome sẽ cung cấp thêm nhiều chế độ kiểm soát cho người dùng để điều chỉnh phần cài đặt.

Làm cách nào để kiểm tra xem tiện ích của tôi có được phép chạy trên một trang web hay không?

Bạn có thể sử dụng API permissions.contains() để kiểm tra xem tiện ích của bạn đã được đã cấp quyền truy cập vào một nguồn gốc cụ thể.