Es tut mir leid, dass ich dies nekropostiert habe, aber ich habe kürzlich eine lokal gehostete Site implementiert, die die Möglichkeit zum Schließen des aktuellen Browser-Tabs benötigt hat, und einige interessante Problemumgehungen gefunden, die nirgendwo gut dokumentiert sind, wo ich sie finden konnte.
Hinweis: Diese Problemumgehungen wurden unter Berücksichtigung einer lokal gehosteten Site durchgeführt und erfordern (mit Ausnahme von Edge), dass der Browser speziell konfiguriert ist. Dies ist daher nicht ideal für öffentlich gehostete Sites.
Kontext: In der Vergangenheit das jQuery-Skriptwindow.close()
die aktuelle Registerkarte in den meisten Browsern problemlos schließen. Moderne Browser unterstützen dieses Skript jedoch möglicherweise aus Sicherheitsgründen nicht mehr.
Google Chrome:
In Chrome kann das Skript window.close () nicht ausgeführt werden, und es passiert nichts, wenn Sie versuchen, es zu verwenden. Mit dem Chrome-Plugin TamperMonkey können wir jedoch die window.close () -Methode verwenden, wenn Sie die // @grant window.close
in den UserScript-Header von TamperMonkey aufnehmen.
Zum Beispiel sieht mein Skript (das ausgelöst wird, wenn auf eine Schaltfläche mit id = 'close_page' geklickt wird und wenn im Browser-Popup 'yes' gedrückt wird) folgendermaßen aus:
// ==UserScript==
// @name Close Tab Script
// @namespace http://tampermonkey.net/
// @version 1.0
// @description Closes current tab when triggered
// @author Mackey Johnstone
// @match http://localhost/index.php
// @grant window.close
// @require http://code.jquery.com/jquery-3.4.1.min.js
// ==/UserScript==
(function() {
'use strict';
$("#close_page").click(function() {
var confirm_result = confirm("Are you sure you want to quit?");
if (confirm_result == true) {
window.close();
}
});
})();
Hinweis: Diese Lösung kann die Registerkarte nur schließen, wenn sie NICHT die letzte geöffnete Registerkarte ist. Daher kann die Registerkarte nicht effektiv geschlossen werden, wenn das Fenster dadurch geschlossen wird, dass die letzte Registerkarte geöffnet wird.
Feuerfuchs:
Firefox verfügt über eine erweiterte Einstellung, die Sie aktivieren können, damit Skripts Fenster schließen können, wodurch die window.close()
Methode effektiv aktiviert wird. Um diese Einstellung zu aktivieren, gehen Sie zu about: config, suchen und suchen Sie die Einstellung dom.allow_scripts_to_close_windows und wechseln Sie von false zu true.
Auf diese Weise können Sie die window.close()
Methode wie jedes andere Skript direkt in Ihrer jQuery-Datei verwenden.
Dieses Skript funktioniert beispielsweise perfekt mit der Einstellung true:
<script>
$("#close_page").click(function() {
var confirm_result = confirm("Are you sure you want to quit?");
if (confirm_result == true) {
window.close();
}
});
</script>
Dies funktioniert viel besser als die Chrome-Problemumgehung, da der Benutzer die aktuelle Registerkarte schließen kann, auch wenn dies die einzige geöffnete Registerkarte ist und kein Plugin eines Drittanbieters erforderlich ist. Der einzige Nachteil ist jedoch, dass dieses Skript auch von verschiedenen Websites ausgeführt werden kann (nicht nur von der Website, auf der Sie es verwenden möchten). Dies kann möglicherweise ein Sicherheitsrisiko darstellen, obwohl ich mir nicht vorstellen kann, dass das Schließen des aktuellen Tabs besonders gefährlich ist.
Kante:
Enttäuschenderweise hat Edge von allen drei Browsern, die ich ausprobiert habe, die beste Leistung erbracht und mit der window.close()
Methode gearbeitet, ohne dass eine Konfiguration erforderlich war. Wenn das window.close()
Skript ausgeführt wird, werden Sie durch ein zusätzliches Popup darauf hingewiesen, dass die Seite versucht, die aktuelle Registerkarte zu schließen, und gefragt, ob Sie fortfahren möchten.
Schlussbemerkung: Die Lösungen für Chrome und Firefox sind Problemumgehungen für etwas, das die Browser möglicherweise aus Sicherheitsgründen absichtlich deaktiviert haben. Beide erfordern außerdem, dass der Benutzer seine Browser so konfiguriert, dass sie vorab kompatibel sind. Dies ist wahrscheinlich für Websites, die für die öffentliche Nutzung bestimmt sind, nicht geeignet, eignet sich jedoch ideal für lokal gehostete Lösungen wie meine.
Hoffe das hat geholfen! :) :)