首頁 > web前端 > js教程 > 如何保持 Chrome 擴充功能的 Service Worker 持久性?

如何保持 Chrome 擴充功能的 Service Worker 持久性?

Linda Hamilton
發布: 2024-12-10 11:21:12
原創
671 人瀏覽過

How to Keep a Chrome Extension's Service Worker Persistent?

如何在Chrome 擴充中保留Service Worker

簡介

在標準Chrome 擴充中,Service Worker 無法持久化,這對攔截資料或長期維護狀態至關重要的場景提出了挑戰。本文探討了克服此限制的各種方法。

解決方法

漏洞利用(Chrome 110)

Chrome 110 存在一個允許服務工作線程通過延長30 秒API。

// background.js
const keepAlive = (i => state => {
  if (state && !i) {
    if (performance.now() > 20e3) chrome.runtime.getPlatformInfo();
    i = setInterval(chrome.runtime.getPlatformInfo, 20e3);
  } else if (!state && i) {
    clearInterval(i);
    i = 0;
  }
})();

async function doSomething() {
  try {
    keepAlive(true);
    const res = await (await fetch('........')).text();
    // ...........
  } catch (err) {
    // ..........
  } finally {
    keepAlive(false);
  }
}
登入後複製

離屏API (Chrome 109 )

此API 允許建立離屏文檔,每30 秒發送一次訊息,以保持Service Worker 處於活動狀態。

  • Manifest.json: "permissions": ["offscreen"]
  • offscreen.html:
  • offscreen.js: setInterval(() => (await navigator.serviceWorker.ready).active.postMessage('keepAlive'), 20e3);
  • background.js:

    async function createOffscreen() {
    await chrome.offscreen.createDocument({ url: 'offscreen.html', reasons: ['BLOBS'], justification: 'keep service worker running' }).catch(() => {});
    }
    chrome.runtime.onStartup.addListener(createOffscreen);
    createOffscreen();
    登入後複製
// background.js
const connect = () => {
  chrome.runtime.connectNative('nativemessaging_host').onDisconnect.addListener(connect);
};

connect(); // Start the connection on startup
登入後複製

連線到 nativeMessaging透過 chrome.runtime.connectNative 進行主機保持 Service Worker 運作只要連線處於活動狀態。

WebSocket API (Chrome 116)每 30 秒交換一次 WebSocket 訊息可以讓服務工作執行緒保持活動狀態。 專注選項卡開啟一個專用選項卡,其中包含用作持久後台頁面的擴充頁面。

以上是如何保持 Chrome 擴充功能的 Service Worker 持久性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板