これは「やってはいけないこと」の範疇に入るかもしれませんが、Web アクセス可能な Service Worker スクリプト (「sw.js」) をユーザーのページに効果的に挿入し、登録する chrome 拡張機能を開発しようとしています。 Service Worker をそのスクリプトに追加します。
今、私は以下を持っています: Manifest.json:
{
"manifest_version": 2,
"name": "MyApp",
"description": "none",
"version": "1.0",
"incognito": "split",
"web_accessible_resources": ["sw.js"],
"permissions": [
"webRequestBlocking","webRequest",
"*://*/*"
],
"background":
{
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["initPage.js"],
"all_frames": false
}]
}
background.js
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
return {redirectUrl: chrome.extension.getURL("sw.js")};
},
{urls: ["*://*/switchme.js"]},
["blocking"]);
initPage.js:
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/switchme.js').then(function(registration) {
console.log('ServiceWorker registration successful with scope: ', registration.scope);
}).catch(function(err) {
console.log('ServiceWorker registration failed: ', err);
})
}
うまくいけば、これから私が達成しようとしていることがわかります。sw.js
基本的に、拡張機能の web-accessible-scripts でホストされている Service Worker を に登録しようとしています。私がこれを行うことができると信じている方法は、リクエストをインターセプトし、switchme.js
return にリダイレクトすることsw.js
です。
このアプローチの唯一の問題は、これを試みると Chrome ブラウザーがクラッシュすることです。スタックをextensions::sendRequest
次の行までトレースしました。
nativeFunction(functionName,
request.args,
requestId,
hasCallback,
optArgs.forIOThread,
optArgs.preserveNullInObjects);
デバッグのアイデアや、これが機能する可能性があると私が夢中になっている理由についての適切な説明を添えて、頭をひっくり返していただければ幸いです。