Heim >Web-Frontend >js-Tutorial >Warum können „window.close()' und „self.close()' Chrome Windows nicht schließen?

Warum können „window.close()' und „self.close()' Chrome Windows nicht schließen?

Linda Hamilton
Linda HamiltonOriginal
2024-12-18 03:43:10958Durchsuche

Why Do `window.close()` and `self.close()` Fail to Close Chrome Windows?

Window.close und Self.close schließen Chrome Windows nicht: Eine umfassende Analyse

Aufrufen von window.close() oder self.close () im JavaScript-Code kann das Fenster in Chrome möglicherweise nicht schließen. Diese Diskrepanz ist auf ein weit verbreitetes Missverständnis zurückzuführen, dass Chrome es Skripten verbietet, Fenster zu schließen, es sei denn, sie wurden per Skript erstellt. Obwohl dies falsch ist, funktionieren diese Methoden möglicherweise dennoch nicht wie erwartet. Dieser Artikel befasst sich mit den zugrunde liegenden Gründen und untersucht mögliche Lösungen.

Sicherheitsbeschränkungen

Moderne Browser haben Sicherheitsmaßnahmen implementiert, um zu verhindern, dass bösartige Skripte Fenster wahllos schließen. Gemäß der Spezifikation window.close() darf JavaScript im Allgemeinen kein Fenster schließen, das nicht von demselben Skript erstellt wurde. Diese Einschränkung zielt darauf ab, Sicherheitslücken und Unannehmlichkeiten für den Benutzer einzudämmen.

Firefox-Implementierung

Firefox hält sich strikt an diese Sicherheitsrichtlinien und verbietet ausdrücklich das Schließen von Fenstern durch Skripte, die nicht von geöffnet wurden Skript. Wenn ein Greasemonkey/Tampermonkey-Skript versucht, window.close() in Firefox zu verwenden, wird die Fehlermeldung ausgelöst: „Skripte schließen möglicherweise keine Fenster, die nicht vom Skript geöffnet wurden.“

Chrome-Implementierung

Chrome hingegen erlaubt Skripten, Fenster zu schließen, die nicht per Skript erstellt wurden. Diese Ausnahme erstreckt sich jedoch nicht auf Userscript-Kontexte wie Greasemonkey oder Tampermonkey. Versuche, window.close() in diesen Kontexten zu verwenden, führen zu einem stillen Fehler.

Problemumgehungen

Während Chrome-Erweiterungen und Firefox-Add-Ons eine zuverlässige Lösung zum Schließen bieten Windows gibt es hackige Problemumgehungen für Benutzer Skripte:

Chrome:

  • Self Redirection Exploit: Dieser Exploit ist im Allgemeinen nicht mehr effektiv. Allerdings funktioniert es möglicherweise immer noch mit injiziertem Code in neu geöffneten Tabs ohne Browserverlauf.
  • @grant Window.Close-Methode: Mithilfe der @grant-Direktive in Tampermonkey-Skripten ist dies möglich Aktivieren Sie die Funktion window.close(). Dies funktioniert jedoch nur für zusätzliche Tabs und nicht für den letzten verbleibenden Tab.

Firefox:

  • Sicherheitseinstellungen deaktivieren: Ändern Sie die about:config-Einstellung „allow_scripts_to_close_windows“ auf „true“. Dies wird aus Sicherheitsgründen nicht empfohlen.

Langfristige Lösung

Der zuverlässigste Ansatz besteht darin, eine dedizierte Chrome-Erweiterung oder ein Firefox-Add-on zu erstellen das kann window.close() effektiv aufrufen. Alternativ könnten Entwickler von Benutzerskripten erwägen, eine Funktionsanfrage an Greasemonkey oder Tampermonkey zu senden, um eine integrierte Funktion zum Schließen von Fenstern zu erhalten.

Das obige ist der detaillierte Inhalt vonWarum können „window.close()' und „self.close()' Chrome Windows nicht schließen?. 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