Это может подпадать под категорию «не делайте этого», но я пытаюсь разработать расширение для Chrome, которое эффективно внедряет доступный через Интернет скрипт сервисного работника («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
}]
}
фон.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
, который размещен в веб-доступных сценариях в расширении. Я считаю, что могу это сделать, перехватив запрос на switchme.js
и перенаправив его на возврат sw.js
.
Единственная проблема с этим подходом заключается в том, что мой браузер Chrome падает, когда я пытаюсь это сделать. Я проследил стек до строки extensions::sendRequest
:
nativeFunction(functionName,
request.args,
requestId,
hasCallback,
optArgs.forIOThread,
optArgs.preserveNullInObjects);
Любые идеи по отладке или пощечины с хорошим объяснением того, почему я сумасшедший, думая, что это может сработать, приветствуются.
"*://*/switchme.js"
? - person Dayton Wang   schedule 10.06.2015chrome://crashes/
после запуска сбоя и зарегистрировать ошибку с информацией оттуда. То, что вы пытаетесь сделать, в идеале должно завершиться с осмысленным сообщением об ошибке, а не с ошибкой. - person Jeff Posnick   schedule 15.06.2015