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ể giới hạn quyền truy cập của máy chủ tiện ích vào danh sách trang web tuỳ chỉnh, hoặc có thể định cấu hình các tiện ích yêu cầu người dùng nhấp vào để truy cập vào trang hiện tại.

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

Thay đổi này ảnh hưởng đến mọi API chịu ảnh hưởng bởi quyền của máy chủ lưu trữ được chỉ định trong tệp kê khai của tiện ích cũng như tập lệnh nội dung. Các API yêu cầu quyền của máy chủ bao gồm webRequest, cookie, tabs.executeScript()tabs.insertCSS(), cũng như thực hiện các yêu cầu trên nhiều nguồn gốc, 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 trang web được yêu cầu. Các tuỳ chọn này được hiển thị 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 chế độ kiểm soát trình đơn theo bối cảnh cho quyền của máy chủ thời gian chạy, trong đó có các tuỳ chọn để chạy tiện ích khi bạn nhấp, trên một trang web cụ thể hoặc trên tất cả trang web.

Điều gì xảy ra nếu người dùng chọn chạy tiện ích 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. Tiện ích được cấp quyền truy cập tạm thời cho bất kỳ máy chủ lưu trữ nào mà người dùng nhấp vào tiện ích đó nếu máy chủ lưu trữ đó do tiện ích yêu cầu (và không phải là trang web bị hạn chế, chẳng hạn như chrome://settings). Khi bạn thiết lập để chạy khi nhấp chuột, Chrome sẽ huy hiệu 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 tiện ích đang yêu cầu quyền truy cập trên 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ì sẽ 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ần người dùng làm gì thêm. 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 cấp quyền, hành vi này giống như khi người dùng đặt tiện ích để chạy khi nhấp chuột.

Điều gì sẽ 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 vẫn có thể chặn, sửa đổi và chặn mọi yêu cầu của các trang web mà tiện ích đó có quyền truy cập. Đối với các trang web mà tiện ích không có quyền truy cập, Chrome sẽ huy hiệu 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 đó, Chrome sẽ 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.

Tập lệnh nội dung, tab.executScript(), tab.insertCSS()

Tiện ích này vẫn có thể tự động chèn các tập lệnh và biểu định kiểu cho mọi trang web mà tiện ích có quyền truy cập. Đối với các trang web mà tiện ích không có quyền truy cập, Chrome sẽ huy hiệu 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 bạn đặt tập lệnh nội dung để chèn tại document_idle, thì tập lệnh sẽ chèn vào ngay lập tức. Nếu không, Chrome sẽ 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 trong quá trình tải trang (tại document_start hoặc document_end). Các lệnh gọi lại cho phương thức tabs.executeScript()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à trang nền XHR

Tiện ích này vẫn có thể đọc và sửa đổi mọi cookie từ, đồng thời 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 cookie của nguồn gốc khác hoặc XHRing sang một máy chủ lưu trữ khác, nên Chrome sẽ không gắn huy hiệu cho tiện ích đó để cho người dùng biết rằng tiện ích đang 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 tạo 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 quyền của máy chủ. Đối với những trường hợp này, bạn nên sử dụng 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ụ dưới đây minh hoạ cách hoạt động của tính năng 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à những phương pháp hay nhất để tránh bị ảnh hưởng tiêu cực?

Các tiện ích có thể dùng các API quyền không bắt buộc, activeTabdeclarativeContent để tuân 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 không bị ảnh hưởng và các tiện ích sử dụng quyền này sẽ tiếp tục hoạt động bình thường. declarativeContent API là một giải pháp 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 chế độ cài đặt của người dùng hiện tại của tôi?

Thay đổi này sẽ không ảnh hưởng ngay đến các quyền hiện được cấp cho tiện ích của bạn. Điều này nghĩa là ứng dụng 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à họ được phép truy cập. Trong các bản phát hành sau này, Chrome sẽ cung cấp cho người dùng nhiều quyền kiểm soát hơn để điều chỉnh các chế độ 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 cấp quyền truy cập vào một nguồn gốc nhất định hay chưa.