这可能属于"不要这样做",但我正在尝试开发一个有效注入Web可访问服务工作者脚本的chrome扩展(&# 34; sw.js")进入用户的页面,然后将服务工作者注册到该脚本。
现在,我有以下内容: 的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可访问脚本中。我认为我可以这样做的方法是拦截switchme.js
的请求并将其重定向到返回sw.js
。
这种方法的唯一问题是我的Chrome浏览器在尝试此操作时崩溃了。我将堆栈追踪到extensions::sendRequest
:
nativeFunction(functionName,
request.args,
requestId,
hasCallback,
optArgs.forIOThread,
optArgs.preserveNullInObjects);
任何调试的想法或一些副作用都可以很好地解释为什么我认为这可能有用,我会很感激。
答案 0 :(得分:0)
浏览器崩溃似乎与this reported bug on the chromium issue tracker有关。
但是,请注意this change in the chromium source,表明问题不再是从扩展程序的URL注册服务工作者。
来自提交消息:
[服务人员注册]允许注册的扩展方案 服务人员
服务工作者需要安全的来源,例如HTTPS。 chrome-extension://页面不是HTTP / HTTPS,但是这样安全 更改成为允许扩展注册a的必要步骤 服务工作者。
“chrome-extension”被添加为允许服务人员的计划。
作为脚注,chrome扩展中的服务工作者仍在进行中。您可以通过跟踪this issue来跟踪其进度。