ホームページ >ウェブフロントエンド >jsチュートリアル >`window.close()` と `self.close()` が Chrome ウィンドウを閉じないのはなぜですか?

`window.close()` と `self.close()` が Chrome ウィンドウを閉じないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-14 19:01:14158ブラウズ

Why Won't `window.close()` and `self.close()` Close My Chrome Window?

「window.close と self.close Chrome でウィンドウを閉じないでください: 包括的な説明と解決策」

一般的な考えに反して、JavaScript には実際に次のような機能があります。 Chrome であっても、スクリプトによって作成されたウィンドウを閉じます。このセキュリティ対策は、悪意のあるアクティビティを防ぐために導入され、JavaScript が同じスクリプトによって作成されていないウィンドウを閉じることを制限します。

問題の根本

window.close() 仕様によると、ブラウザは、次の条件が満たされた場合にウィンドウを閉じることを選択できます:

  1. ブラウジング コンテキストは「スクリプトを閉じることができる」必要があります。スクリプトによって作成されたか、セッション履歴にドキュメントが 1 つだけあります。
  2. 現在のスクリプトの閲覧コンテキストは、ターゲットの閲覧コンテキストに精通している必要があります。
  3. 現在のスクリプトの閲覧コンテキストは、

Firefox の制限

Firefox は、ターゲットの閲覧コンテキストをナビゲートすることを許可されています。 JavaScript は同じスクリプトによって開かれたウィンドウのみを閉じることができるという条件。この基準を満たさないウィンドウを閉じようとすると、「スクリプトによって開かれていないウィンドウをスクリプトで閉じることはできません。」というエラー メッセージが表示されます。

Chrome の例外

Chrome では、この規則の例外として、同じスクリプトで作成されていなくても JavaScript でウィンドウを閉じることができます。ただし、この例外はユーザー スクリプトには適用されません。

回避策

Chrome

  1. 自己リダイレクト エクスプロイト (非推奨): 現在のページをそのページ自体に置き換えて、ウィンドウを閉じます: open(location, '_self').close();。このエクスプロイトは現在、ほとんどブロックされています。
  2. TamperMonkey オーバーライド (機能制限): 明示的な // @grant ディレクティブを使用して window.close() を呼び出すと、Chrome バージョン 43 で追加のタブを閉じることができます。

Firefox

  1. セキュリティ設定の調整 (非推奨):allow_scripts_to_close_windows を true に設定してセキュリティ保護を無効にしますabout:config で。これにはセキュリティ上のリスクが生じることに注意してください。

長期的な解決策

ウィンドウを確実に閉じるには、Chrome 拡張機能または Firefox アドオンの開発を検討してください。これらの拡張機能は、JavaScript の制限を受けることなく、現在のウィンドウを閉じることができます。

以上が`window.close()` と `self.close()` が Chrome ウィンドウを閉じないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。