簡介
在標準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 處於活動狀態。
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 運作只要連線處於活動狀態。
以上是如何保持 Chrome 擴充功能的 Service Worker 持久性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!