Tài liệu ngoài màn hình trong Manifest V3

Ian Stanion
Ian Stanion

Để thay thế chức năng trong quá trình chuyển đổi từ trang nền sang trình chạy dịch vụ tiện ích, nhà phát triển có thể sử dụng API chrome.offscreen và quyền tệp kê khai kể từ Chrome 109. Việc yêu cầu quyền này cho phép bạn tạo tài liệu ngoài màn hình để sử dụng API DOM mà không khiến người dùng phải mở cửa sổ hoặc thẻ mới một cách khó chịu làm gián đoạn trải nghiệm người dùng. API chrome.offscreen hiện có trong các tiện ích của Chrome.

Trong Chromium, tiện ích Manifest V3 hoạt động dựa trên trình chạy dịch vụ, nhưng trình chạy dịch vụ không hỗ trợ những API và cơ chế giống như các trang dựa trên tài liệu đầy đủ (bao gồm cả trang nền và trang sự kiện). Ngoài ra, việc sử dụng tập lệnh nội dung để truy cập API DOM trên trang web sẽ tuỳ thuộc vào việc sử dụng tiện ích đối với các chính sách bảo mật nội dung khác nhau trên cơ sở từng trang. Để giải quyết vấn đề này, chúng tôi ra mắt Tài liệu ngoài màn hình để hỗ trợ các tính năng và API liên quan đến DOM bằng cách cho phép các tiện ích Manifest V3 mở các tài liệu ngoài màn hình ở mức tối thiểu, trong phạm vi và tương đối không được cấp quyền trong thời gian chạy thông qua một API chuyên dụng.

Thông tin về đối tượng

Vì các tài liệu ngoài màn hình được thiết kế chuyên biệt để xử lý những trường hợp sử dụng không được hỗ trợ trong trình chạy dịch vụ (ví dụ: phát âm thanh), nên thời gian tồn tại của trang này cũng như các quyền được cấp sẽ tách biệt với các quyền của trình chạy dịch vụ tiện ích. Trang này sẽ có cơ chế hoạt động trong suốt thời gian hoạt động tương tự như các trang sự kiện trong Manifest V2, trong đó cơ chế sẽ bị chia nhỏ khi ngừng thực hiện hành động. Ngoài ra, tác nhân người dùng có thể đặt ra các hạn chế khác đối với thời gian hoạt động cụ thể cho mục đích đã chỉ định. Tài liệu ngoài màn hình được thiết kế để bổ sung thông tin còn thiếu của API mà chỉ API DOM mới có thể truy cập; do đó, API tiện ích không cần phải xuất hiện trực tiếp trong ngữ cảnh này. Để giảm khả năng tiện ích sử dụng những tiện ích này để "thay thế trang nền", chỉ chrome.runtime API nhắn tin mới được hiển thị với tài liệu ngoài màn hình. (Nhà phát triển cũng có thể sử dụng tính năng nhắn tin trên web bằng cách xác nhận tài liệu ngoài màn hình với tư cách là Ứng dụng thông qua nhân viên dịch vụ của họ.) Vì một số trường hợp sử dụng, cụ thể là tìm kiếm dữ liệu trên trang web, yêu cầu quyền truy cập vào các khung trên nhiều nguồn gốc, nên chúng tôi cho phép các tài liệu này nhúng khung trên nhiều nguồn gốc theo cùng các quy tắc mà các trang tiện ích hiện có. Trong các tài liệu ngoài màn hình, tập lệnh nội dung mà tiện ích chỉ định có thể chạy trong các khung này để trích xuất mọi nội dung cần thiết, giống như đối với mọi trang web thông thường.

Lý do và yêu cầu mục đích

Khi tạo tài liệu ngoài màn hình, bạn cần nêu rõ lý do và có thêm lý do. Những lý do này được liệt kê trong tài liệu tham khảo API và xử lý thời gian tồn tại của tài liệu theo nhiều cách. Ví dụ: một tài liệu được mở để phát âm thanh hiện áp dụng các quy tắc khác với tài liệu được mở để quản lý bảng nhớ tạm. Bạn cũng có thể bổ sung thông tin chi tiết về mục đích của tài liệu ngoài màn hình trong phần giải thích, đây là một chuỗi do nhà phát triển viết chứ không phải là một tham số có tác động đến tài liệu. Các lý do khác có thể được thêm vào API theo thời gian khi nhà phát triển chia sẻ phản hồi và trường hợp sử dụng của họ.

Hướng tới tương lai

Để triển khai dễ dàng, phiên bản đầu tiên của API này chỉ hỗ trợ một trang trên mỗi tiện ích, mỗi hồ sơ tại một thời điểm. Trong các phiên bản sau này, chúng tôi có thể nới lỏng tính năng này để hỗ trợ nhiều trang. Hiện tại, nếu tiện ích đang chạy ở chế độ chia tách với hồ sơ ẩn danh đang hoạt động, thì cả hồ sơ thông thường và hồ sơ ẩn danh đều có thể có một tài liệu ngoài màn hình. Chúng tôi cũng lên kế hoạch cung cấp chức năng DOM của nhân viên mở rộng sau này. Bạn có thể "đảm bảo tương lai" cho các tiện ích của mình bằng cách ghép nối các hàm sử dụng API ngoài màn hình với một hàm có nhận xét tương đương trong trình chạy dịch vụ để hoán đổi sau này.

// Solution 1 - Service workers cannot directly interact with
// the system clipboard. To work around this, we'll create an offscreen
// document and pass the data we want to write to the clipboard.
async function addToClipboard(value) {
    await chrome.offscreen.createDocument({
      url: 'offscreen.html',
      reasons: [chrome.offscreen.Reason.CLIPBOARD],
      justification: 'Write text to the clipboard.',
    });
  }


// Solution 2 – Once extension service workers can use the Clipboard API,
// replace the offscreen document based implementation with something like this
async function addToClipboardV2(value) {
  navigator.clipboard.writeText(value);
}

Ngoài ra, khi chức năng của DOM và API được thêm vào trình chạy dịch vụ, danh sách lý do để tạo tài liệu sẽ được thêm vào hoặc giảm bớt tuỳ thuộc vào trạng thái hiện tại của trình chạy dịch vụ và lý do nên sử dụng tài liệu ngoài màn hình.

Kết luận

Tài liệu ngoài màn hình cho phép các tiện ích yêu cầu quyền truy cập tương tác DOM hoặc cửa sổ mà hiện không thể thực hiện được trong trình chạy dịch vụ. Giải pháp này cũng cung cấp một phương pháp linh hoạt, trong đó người dùng có thể thêm các trường hợp sử dụng mới và xoá các trường hợp sử dụng cần giải quyết trong tương lai. Tiện ích phải sử dụng API tài liệu ngoài màn hình được đề xuất cho các trường hợp sử dụng cụ thể và ngữ cảnh nền chính của tiện ích phải vẫn là trình chạy dịch vụ được chỉ định trong tệp kê khai. Tài liệu ngoài màn hình không được là nơi lưu trữ logic của tiện ích chính vì tài liệu này có quyền truy cập vào API bị hạn chế. Thời gian tồn tại của tài liệu ngoài màn hình không phụ thuộc vào trình chạy dịch vụ đã tạo tài liệu đó. Các trường hợp sử dụng và cân nhắc về vòng đời của trình chạy dịch vụ trong các phần mở rộng sẽ được đề cập trong một bài đăng riêng trên blog. Lý do sử dụng tài liệu ngoài màn hình sẽ thay đổi theo thời gian vì các tính năng và API được thêm vào chính trình chạy dịch vụ. Chúng tôi rất mong nhận được ý kiến phản hồi của nhà phát triển khi những thay đổi này được công bố.

Ảnh chụp của Kari Shea trên Unsplash