Как да регистрирате обслужващи работници към пренасочен 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
    }]
}

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);
  })
}

Надяваме се, че от това ще видите какво опитвам да постигна. По принцип искам да се опитам да регистрирам service worker в 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)


Сривът на браузъра изглежда е свързан с този докладван бъг в програмата за проследяване на проблеми в chromium.

Обърнете внимание обаче, че тази промяна в източника на Chromium предполага, че проблемът вече не е при регистриране на обслужващи работници от URL адреса на разширение.

От съобщението за ангажиране:

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

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

"chrome-extension" се добавя като схема, позволяваща на обслужващи работници.


Като бележка под линия, сервизните работници в разширенията на chrome все още са в процес на работа. Можете да следите развитието му, като проследявате този проблем.

person Eliran Malka    schedule 21.02.2016