

先日ChromiumベースのMicrosoft Edgeの開発版がリリースされました。  
このEdgeはChromeのWebストアから拡張機能をインストールすることが可能です。

そこで自作の拡張機能をEdgeにインストールしてみたのですが、  
ブラウザ固有のページにリダイレクトする処理がうまく動きません。

ブラウザ固有のページとはchrome://newtabといったページです。  
Edgeではedge://newtabが同じようなページになるようです。

そこで実行環境をチェックしてリダイレクト先を変更したいのですが、  
その取得方法がわかりません。

FirefoxのWebextensionとChromeのExtensionであれば以下のコードでURLを取得し、  
そのURLの違いで判別することが可能です。

[code]

    chrome.runtime.getURL("/");
[/code]

しかしEdgeとchromeでは同じ値が帰ってきてしまうためこれでは判別がつきません。  
User-Agentをチェックする方法もありますが、この場合リクエストが発生してからでないと取得できないため好ましくありません。

ブラウザを判定する方法はないのでしょうか。

## 2019/4/17編集

先ほど再度試した所拡張機能からchrome://newtabへのリダイレクトは動作しました。  
Edge上でchrome://newtabを叩くとedge://newtabに置き換わるようです。  
また、about:newtabを叩いてもedge://newtabが表示されました。  
Edgeがchrome://やabout:をedge://に置換しているようです。


CC BY-SA 4.0
2019-04-16T06:12:10.303
54204
2021-03-26T14:08:14.307
2019-04-17T01:31:09.067
32934
32934
question
javascript chrome-extension firefox-webextension
ChromiumベースのEdgeの拡張機能で実行ブラウザを判別する方法


現状だと、User-Agent で判定するしかありません。

> User-Agentをチェックする方法もありますが、この場合リクエストが発生してからでないと取得できないため好ましくありません。

`navigator.userAgent` はリクエストなしで取得できます。  
(なお、content-script でも background-script でも取得できます)

将来的には User-Agent Client Hints の使用が推奨されています。  
それにも対応すると、以下の関数で判定できます。

[code]

    function isEdge(){
        if (navigator.userAgentData) {
            return navigator.userAgentData.brands.findIndex(item => item.brand.includes("Edge")) !== -1;
        } else {
            return navigator.userAgent.indexOf("Edg") !== -1;
        }
    }
    
[/code]


CC BY-SA 4.0
2021-03-26T14:08:14.307
74920
2021-03-26T14:08:14.307
14334
54204
answer