Tính năng mới trong Chrome 116 dành cho tiện ích

Chrome 116 hiện đã có phiên bản thử nghiệm và có nhiều điểm cập nhật thú vị cho nhà phát triển Tiện ích của Chrome. Hãy cùng xem nhanh những điểm mới.

Mở Bảng điều khiển bên theo cách lập trình

Bảng điều khiển bên là một trong những tính năng được yêu cầu nhiều nhất trong các tiện ích của Chrome và đã có trong Chrome kể từ phiên bản 114. Sau khi ra mắt Side Panel API, một trong những ý kiến phản hồi đầu tiên mà chúng tôi nhận được là các nhà phát triển muốn có cách mở bảng điều khiển bên theo phương thức lập trình. Và đây là tin vui: chrome.sidePanel.open hiện đang ở giai đoạn thử nghiệm. Bạn có thể dùng API này để mở bảng điều khiển bên của tiện ích theo phương thức lập trình để phản hồi một hoạt động tương tác của người dùng, chẳng hạn như một lượt nhấp vào trình đơn theo bối cảnh:

chrome.contextMenus.onClicked.addListener((info, tab) => {
  if (info.menuItemId === 'openSidePanel') {
    // This will open the panel in all the pages on the current window.
    chrome.sidePanel.open({ windowId: tab.windowId });
  }
});

Hỗ trợ WebSocket trong Service Worker

Hỗ trợ WebSocket là yếu tố quan trọng đối với nhiều tiện ích có kế hoạch chuyển sang Manifest V3. Chrome 116 cải thiện hơn nữa khả năng hỗ trợ WebSocket trong các worker dịch vụ vì mọi hoạt động WebSocket sẽ đặt lại bộ hẹn giờ không hoạt động của worker dịch vụ trong 30 giây. Điều này có nghĩa là miễn là WebSocket của bạn đang hoạt động, thì service worker sẽ vẫn hoạt động.

Bạn có thể sử dụng cơ chế này để triển khai cơ chế duy trì hoạt động, đảm bảo trình chạy dịch vụ của bạn luôn hoạt động trong khi bạn đang chờ tin nhắn từ máy chủ – ngay cả khi phải mất hơn 30 giây thì tin nhắn tiếp theo mới đến:

function keepAlive() {
  const keepAliveIntervalId = setInterval(
    () => {
      if (webSocket) {
        webSocket.send('keepalive');
      } else {
        clearInterval(keepAliveIntervalId);
      }
    },
    // It's important to pick an interval that's shorter than 30s, to
    // avoid that the service worker becomes inactive.
    20 * 1000
  );
}

Hãy xem hướng dẫnmẫu WebSocket mới của chúng tôi để biết thêm thông tin.

Keepalive mạnh mẽ cho Service Worker

Nói về vòng đời của worker dịch vụ, một bản cập nhật quan trọng khác đã xuất hiện: tính năng duy trì hoạt động mạnh mẽ cho các API yêu cầu người dùng tương tác. Các API yêu cầu người dùng tương tác sẽ có lệnh "giữ kết nối" mạnh mẽ cho các worker dịch vụ của tiện ích (tức là cho phép worker thực hiện tác vụ này lâu hơn 5 phút):

Ghi âm và ghi hình trong nền

Một khoảng cách khác giữa Manifest V2 và Manifest V3 đã được thu hẹp: bạn có thể ghi âm và ghi hình ở chế độ nền bằng cách sử dụng tabCapture và tài liệu ngoài màn hình. Sử dụng API chrome.tabCapture trong một worker dịch vụ để lấy mã nhận dạng luồng sau một cử chỉ của người dùng. Sau đó, bạn có thể truyền đối tượng này đến một tài liệu ngoài màn hình để bắt đầu ghi hình.

Hãy xem tabCapturehướng dẫn mới cập nhật của chúng tôi để tìm hiểu cách hoạt động của tính năng này hoặc xem ví dụ hoạt động trong mẫu Tab Capture – Recorder (Ghi lại bằng tính năng Ghi lại màn hình).

API mới: runtime.getContexts()

API runtime.getContexts() mới cho phép bạn tìm nạp thông tin về các bối cảnh đang hoạt động được liên kết với tiện ích của bạn. Ví dụ: bạn có thể dùng phương thức này để kiểm tra xem có tài liệu nào đang hoạt động ngoài màn hình hay không:

const existingContexts = await chrome.runtime.getContexts({});
const offscreenDocument = existingContexts.find(
    (c) => c.contextType === 'OFFSCREEN_DOCUMENT9;
  );

Lý do mới cho việc không hiển thị trên màn hình: GEOLOCATION

geolocation đã được thêm vào làm một lý do hợp lệ khác để sử dụng tài liệu ngoài màn hình. Hãy tham khảo hướng dẫn của chúng tôi về cách sử dụng vị trí địa lý để tìm hiểu thêm về cách lấy vị trí địa lý của tiện ích bằng Offscreen API.

chrome.action.setBadgeText()

action.setBadgeText đã được cập nhật để giải quyết sự không nhất quán giữa Manifest V2 và Manifest V3. Truyền một chuỗi trống hoặc null đến action.setBadgeText sẽ xoá văn bản huy hiệu cho thẻ đã chỉ định và thay vào đó sử dụng văn bản huy hiệu chung theo mặc định.

action.setBadgeText({tabId: tabId, text: ''});

Tóm tắt: một bước nữa hướng tới Manifest V3

Với khả năng hỗ trợ thời gian hoạt động của Service Worker được cải thiện và TabCapture API mới cập nhật, chúng tôi đã tiếp tục đạt được tiến bộ trong mục tiêu thu hẹp khoảng cách về tính năng giữa Manifest V2 và V3. Hãy xem trang về các vấn đề đã biết để biết trạng thái hiện tại.