FirefoxでJavaScriptのwindow.closeが効かない場合の解決方法

Firefoxでは、別タブ等で開かれたページを「window.close()」で閉じることが出来ません。

これはFirefoxのセキュリティポリシーで決められていることなので、どうにもできませんが、以下のJavaScriptで一応は解決可能です。

<button onclick="window.open('about:blank','_self').close();">このページを閉じる</button>

上記コードだけで効かない場合がある

上記コードだけで解決しない場合があったので、調べたところ、

WordPressでの話ですが、「taget=”_blank”」で外部リンクを設定した場合、「rel=”noopener”」をいうものが自動的につきます。

これは以下の引用記事に記述されているような_blankのセキュリティ上の脆弱性の問題を避けるためのものです。

target="_blank" にはセキュリティ上の脆弱性もあります。リンク先のページでは window.opener を使用して親ウィンドウのオブジェクトにアクセスしたり、window.opener.location = newURL によって親ページの URL を変更したりできます。

Google – Tools for Web developersより引用

ただ、この「rel=”noopener”」が設定されているために、先程のJavaScriptが効かないということが分かりました。

ということで、「rel=”noopener”」を外してみると、ページを閉じるボタンとして動かすことが出来ました。

セキュリティか言われた通りの挙動を実装するのが優先か。

普通に考えればセキュリティ優先ではありますが、そこはまぁこういった問題があることをお客様に伝えてヘッジをしてから要相談ということで・・・