この記事を作った動機

 Chromium 系列のブラウザでは動いていた拡張機能が、Firefox では動かないということがあった。原因を調査してみたところ、ネットワーク周りに問題があり、manifest.json の修正で解決できそうなことが分かった。

 問題が解決するまでに試したことを記録しておきたい。

前提

  • 拡張機能はLANにあるサーバーにアクセスすることで動作する
  • LANにあるサーバーにアクセスするときに Firefox の環境にてエラーが発生する
  • LAN内へのサーバーへのアクセスは、HTTPsを用いた通信であり、Firefox側にすでに証明書が入っている
  • LAN内へのサーバーへのアクセスは、直接ブラウザでURLを叩く分には正常に動作する
  • LAN内へのサーバーアクセスは、直接のIP指定ではなく、専用にLAN内だけで通用するドメインをあてがっている

試したこと

実装をXMLHttpRequestからfetchに変更 -> 効果なし

manifest.jsonのmatchesに拡張機能がアクセスするドメインの追加 -> 効果なし

manifest.jsonのpermissionsに対象ドメインを追加 -> 効果あり

fetchでsame-origin -> 効果なし

        let res = await window.fetch(url, {
            credentials: 'same-origin'
        })

現状のmanifest.jsonの例

{
    "manifest_version": 2,
    "name": "ext name",
    "description": "test123",
    "version": "2.2",
    "permissions": [
      "activeTab",
      "https://my.domain/*" 
    ],
    "icons": {
      "128": "imgs/test.png"
    },
    "browser_action": {
        "default_popup": "action/pop.html",
        "default_icon": {
            "128": "imgs/test.png"
        }
    },
    "content_scripts": [
      {
        "js": [
          "scripts/dist/bundle.js"
        ],
        "matches": [
          "https://www.target.com/*",
          "https://my.domain/*",
          "https://*.my.domain/*"
        ]
      }
    ],
    "background": {
        "scripts": ["scripts/background.js"],
        "persistent": false
    },
    "browser_specific_settings": {
      "gecko": {
        "id": "omited"
      }
    }
}

参考にしたサイトとか