Heim >Web-Frontend >js-Tutorial >Warum schließen „window.close()' und „self.close()' mein Chrome-Fenster nicht?

Warum schließen „window.close()' und „self.close()' mein Chrome-Fenster nicht?

Barbara Streisand
Barbara StreisandOriginal
2024-12-14 19:01:14158Durchsuche

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

"window.close und self.close Schließen Sie das Fenster in Chrome nicht: Eine umfassende Erklärung und Lösung"

Entgegen der landläufigen Meinung ist JavaScript tatsächlich dazu in der Lage Schließen von durch Skripte erstellten Fenstern, sogar in Chrome. Diese Sicherheitsmaßnahme, die eingeführt wurde, um böswillige Aktivitäten zu verhindern, verhindert, dass JavaScript Fenster schließt, die nicht von demselben Skript erstellt wurden.

Die Wurzel des Problems

Gemäß der Spezifikation window.close() a Der Browser kann ein Fenster schließen, wenn die folgenden Bedingungen erfüllt sind:

  1. Der Browserkontext muss „durch ein Skript schließbar“ sein, was bedeutet, dass er von einem Skript erstellt wurde oder nur über ein Skript verfügt Dokument in seinem Sitzungsverlauf.
  2. Der Browsing-Kontext des etablierten Skripts muss mit dem Ziel-Browsing-Kontext vertraut sein.
  3. Der Browsing-Kontext des etablierten Skripts muss im Ziel-Browsing-Kontext navigieren dürfen .

Firefox-Einschränkung

Firefox erzwingt strikt die Bedingung, dass JavaScript nur von ihm geöffnete Fenster schließen kann Skript. Jeder Versuch, ein Fenster zu schließen, das dieses Kriterium nicht erfüllt, führt zu der Fehlermeldung „Skripte schließen möglicherweise keine Fenster, die nicht durch Skript geöffnet wurden.“

Chrome-Ausnahme

Chrome erlaubt eine Ausnahme von dieser Regel, die es JavaScript ermöglicht, Fenster zu schließen, auch wenn sie nicht vom selben Skript erstellt wurden. Diese Ausnahme gilt jedoch nicht für Benutzerskripte.

Problemumgehungen

Chrome

  1. Self Redirection Exploit (veraltet): Ersetzen Sie die aktuelle Seite durch sich selbst und schließen Sie dann das Fenster: open(location, '_self').close();. Dieser Exploit ist jetzt größtenteils blockiert.
  2. TamperMonkey Override (eingeschränkte Funktionalität): Durch die Verwendung einer expliziten // @grant-Direktive und den Aufruf von window.close() können zusätzliche Tabs in Chrome Version 43 und geschlossen werden oben.

Firefox

  1. Optimierung der Sicherheitseinstellungen (nicht empfohlen): Deaktivieren Sie den Sicherheitsschutz, indem Sie „allow_scripts_to_close_windows“ auf „true“ setzen in about:config. Beachten Sie, dass dies ein Sicherheitsrisiko darstellt.

Langfristige Lösung

Für ein zuverlässiges Fensterschließen sollten Sie die Entwicklung einer Chrome-Erweiterung oder eines Firefox-Add-ons in Betracht ziehen. Diese Erweiterungen können das aktuelle Fenster ohne die Einschränkungen von JavaScript schließen.

Das obige ist der detaillierte Inhalt vonWarum schließen „window.close()' und „self.close()' mein Chrome-Fenster nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn