4

これは「やってはいけないこと」の範疇に入るかもしれませんが、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.jsreturn にリダイレクトすることsw.jsです。

このアプローチの唯一の問題は、これを試みると Chrome ブラウザーがクラッシュすることです。スタックをextensions::sendRequest次の行までトレースしました。

nativeFunction(functionName,
  request.args,
  requestId,
  hasCallback,
  optArgs.forIOThread,
  optArgs.preserveNullInObjects);

デバッグのアイデアや、これが機能する可能性があると私が夢中になっている理由についての適切な説明を添えて、頭をひっくり返していただければ幸いです。

4

1 に答える 1

0

ブラウザのクラッシュは、Chromium issue tracker で報告されたこのバグに関連しているようです。

ただし、このクロム ソースの変更は、拡張機能の URL から Service Worker を登録する際に問題が発生しなくなったことを示していることに注意してください。

コミットメッセージから:

【サービスワーカー登録】サービスワーカーを許可する登録延長スキーム

Service Worker には、HTTPS などのセキュアなオリジンが必要です。chrome-extension:// ページは HTTP/HTTPS ではありませんが、安全であるため、この変更は、拡張機能が Service Worker を登録できるようにするために必要な手順になります。

Service Worker を許可するスキームとして「chrome-extension」が追加されました。


脚注として、Chrome 拡張機能の Service Worker はまだ開発中です。この問題を追跡することで、進行状況を追跡できます。

于 2016-02-21T11:46:51.750 に答える