Как зарегистрировать сервис-воркеров на перенаправленный URL-адрес скрипта

Это может подпадать под категорию «не делайте этого», но я пытаюсь разработать расширение для 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);

Любые идеи по отладке или пощечины с хорошим объяснением того, почему я сумасшедший, думая, что это может сработать, приветствуются.


person bkritzer    schedule 09.06.2015    source источник
comment
Браузер вылетает на какой строке? Вы проверили, чтобы использовать определенный URL вместо "*://*/switchme.js"?   -  person Dayton Wang    schedule 10.06.2015
comment
Да, я пробовал определенный URL. Я не могу определить точное место, где происходит сбой браузера, поскольку это происходит при вызове nativeFunction, который мне неизвестен.   -  person bkritzer    schedule 11.06.2015
comment
Я на 99% уверен, что это подпадает под категорию «не делай этого». Но было бы неплохо, если бы вы могли посетить chrome://crashes/ после запуска сбоя и зарегистрировать ошибку с информацией оттуда. То, что вы пытаетесь сделать, в идеале должно завершиться с осмысленным сообщением об ошибке, а не с ошибкой.   -  person Jeff Posnick    schedule 15.06.2015


Ответы (1)


Сбой браузера, по-видимому, связан с этой ошибкой, о которой сообщается в системе отслеживания проблем хрома< /а>.

Однако обратите внимание, что это изменение в источнике хрома предполагает, что проблема больше не при регистрации сервис-воркеров по URL-адресу расширения.

Из сообщения коммита:

[Регистрация сервисного работника] Зарегистрированная схема расширения, позволяющая сервисным работникам

Service Workers требуют безопасного источника, такого как HTTPS. Страницы chrome-extension:// не являются HTTP/HTTPS, но безопасны, поэтому это изменение становится необходимым шагом, позволяющим расширениям регистрировать Service Worker.

«chrome-extension» добавлен как схема, разрешающая сервис-воркерам.


В качестве сноски: сервисные работники в расширениях Chrome все еще находятся в стадии разработки. Вы можете следить за ее ходом, отслеживая эту проблему.

person Eliran Malka    schedule 21.02.2016