質問: 先日ChromiumベースのMicrosoft Edgeの開発版がリリースされました。 このEdgeはChromeのWebストアから拡張機能をインストールすることが可能です。 そこで自作の拡張機能をEdgeにインストールしてみたのですが、 ブラウザ固有のページにリダイレクトする処理がうまく動きません。 ブラウザ固有のページとはchrome://newtabといったページです。 Edgeではedge://newtabが同じようなページになるようです。 そこで実行環境をチェックしてリダイレクト先を変更したいのですが、 その取得方法がわかりません。 FirefoxのWebextensionとChromeのExtensionであれば以下のコードでURLを取得し、 そのURLの違いで判別することが可能です。 ``` chrome.runtime.getURL("/"); ``` しかしEdgeとchromeでは同じ値が帰ってきてしまうためこれでは判別がつきません。 User-Agentをチェックする方法もありますが、この場合リクエストが発生してからでないと取得できないため好ましくありません。 ブラウザを判定する方法はないのでしょうか。 2019/4/17編集 ----------- 先ほど再度試した所拡張機能からchrome://newtabへのリダイレクトは動作しました。 Edge上でchrome://newtabを叩くとedge://newtabに置き換わるようです。 また、about:newtabを叩いてもedge://newtabが表示されました。 Edgeがchrome://やabout:をedge://に置換しているようです。
回答: 現状だと、User-Agent で判定するしかありません。 > > User-Agentをチェックする方法もありますが、この場合リクエストが発生してからでないと取得できないため好ましくありません。 > > > `navigator.userAgent` はリクエストなしで取得できます。 (なお、content-script でも background-script でも取得できます) 将来的には User-Agent Client Hints の使用が推奨されています。 それにも対応すると、以下の関数で判定できます。 ``` function isEdge(){ if (navigator.userAgentData) { return navigator.userAgentData.brands.findIndex(item => item.brand.includes("Edge")) !== -1; } else { return navigator.userAgent.indexOf("Edg") !== -1; } } ```