はじめに
標準の Chrome 拡張機能では、Service Worker を永続化することはできません永続化されるため、データの傍受や長期間にわたる状態の維持が重要なシナリオでは課題が生じます。この記事では、この制限を克服するためのさまざまな方法を検討します。
バグエクスプロイト (Chrome 110)
Chrome 110 には、Service Worker が使用できるバグがあります。非同期 Chrome を呼び出すことで、アクティブな状態を 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 を使用すると、Service Worker をアクティブに保つために 30 秒ごとにメッセージを送信するオフスクリーン ドキュメントを作成できます。
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();
NativeMessaging API (Chrome 105 )
nativeMessaging への接続chrome.runtime.connectNative 経由でホストすると、Service Worker を可能な限り実行し続けることができます接続がアクティブであるため。
// background.js const connect = () => { chrome.runtime.connectNative('nativemessaging_host').onDisconnect.addListener(connect); }; connect(); // Start the connection on startup
WebSocket API (Chrome 116 )
WebSocket メッセージの交換間隔が 30 秒未満であれば、Service Worker はアクティブに保たれます。
専用タブ
永続的な背景ページとして機能する拡張ページを含む専用のタブを開きます。
以上がChrome 拡張機能の Service Worker を永続的に維持するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。