Wie schließe ich die aktuelle Registerkarte in einem Browserfenster?

434

Ich möchte einen Link auf einer Webseite erstellen, der die aktuell aktive Registerkarte in einem Browser schließt, ohne andere Registerkarten im Browser zu schließen.
Wenn der Benutzer auf den Link zum Schließen klickt, sollte eine Warnmeldung angezeigt werden, in der er aufgefordert wird, mit den beiden Schaltflächen "JA" und "NEIN" zu bestätigen. Wenn der Benutzer auf "JA" klickt, schließen Sie diese Seite und wenn "NEIN", tun Sie nichts.

Wie geht das? Irgendwelche Vorschläge?

Naveed
quelle
Ich bin vielleicht zu spät hier, aber dies wird von den Browsern aus einem bestimmten Grund verhindert. <br> <br> Stellen Sie sich vor, Sie versuchen immer wieder, ein Fenster zu schließen, und es wird nicht geschlossen, da es den " Wenn nein " -Teil Ihrer Frage ausführt ist 'nichts tun'. <br> <br> Das wird sicher irritierend!
Muhammad Osama

Antworten:

502

Dazu benötigen Sie Javascript. Verwendung window.close():

close();

Hinweis: Die aktuelle Registerkarte ist impliziert. Dies ist äquivalent:

window.close();

oder Sie können ein anderes Fenster angeben.

Damit:

function close_window() {
  if (confirm("Close Window?")) {
    close();
  }
}

mit HTML:

<a href="javascript:close_window();">close</a>

oder:

<a href="#" onclick="close_window();return false;">close</a>

Sie return falsehier, um das Standardverhalten für das Ereignis zu verhindern. Andernfalls versucht der Browser, zu dieser URL zu wechseln (was offensichtlich nicht der Fall ist).

Jetzt sind die Optionen im window.confirm()Dialogfeld OK und Abbrechen (nicht Ja und Nein). Wenn Sie wirklich Ja und Nein wollen, müssen Sie eine Art modales Javascript-Dialogfeld erstellen.

Hinweis: Es gibt browserspezifische Unterschiede zu den oben genannten. Wenn Sie das Fenster mit Javascript (via window.open()) geöffnet haben, dürfen Sie das Fenster mit Javascript schließen. Firefox verhindert, dass Sie andere Fenster schließen. Ich glaube, IE wird den Benutzer um Bestätigung bitten. Andere Browser können variieren.

Cletus
quelle
384
Sie können keine Registerkarte über JavaScript schließen. "Diese Methode darf nur für Fenster aufgerufen werden, die von einem Skript mit der window.open-Methode geöffnet wurden." Mit anderen Worten, Sie können JavaScript nur verwenden, um ein Fenster / eine Registerkarte zu schließen, die bzw. der über JavaScript erstellt wurde.
Ryan Joy
7
-1 Funktioniert nicht Chrome 30 PC die anderen Antworten zeigen, um ein Fenster in der aktuellen Registerkarte zu öffnen und es dann zu schließen
Markasoftware
2
In about:config dom.allow_scripts_to_close_windows = truekönnte die Lösung in Firefox sein (könnte ein großes Sicherheitsrisiko sein!)
Nepomuk Frädrich
6
Der Browser lässt dieses Verhalten nicht zu. Javascript kann nur eine Registerkarte schließen, die es geöffnet hat.
Edward Kennedy
1
Dies funktioniert (zumindest) in Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Siehe auch diesen Artikel
Hering
247

Versuche dies

<a href="javascript:window.open('','_self').close();">close</a>
Daniel Shen
quelle
2
Arbeiten in Firefox 31.0
Adrian Carr
1
Die schlechte Seite dieser Lösung ist, dass eine Get-Anfrage an den Server gesendet wird. Aber auf der anderen Seite habe ich keine andere Lösung gefunden.
100r
18
Wenn Sie dies über die Chrome-Konsolenausgabe tun, können "Skripte nur die Fenster schließen, die von ihr geöffnet wurden"
Parlament
Funktioniert nicht Skripte schließen möglicherweise nur die Fenster, die von ihm geöffnet wurden.
Roman Losev
1
Funktioniert nicht in Chrome 60.0.3079.0: "Skripte schließen möglicherweise nur die Fenster, die von Chrome geöffnet wurden."
Our_Benefactors
65

Diese Methode funktioniert in Chrome und IE:

<a href="blablabla" onclick="setTimeout(function(){var ww = window.open(window.location, '_self'); ww.close(); }, 1000);">
    If you click on this the window will be closed after 1000ms
</a>
Palesz
quelle
56
Einfacher:open(location, '_self').close();
uınbɐɥs
Dies funktionierte gut in IE 11, aber nicht in Chrome 38
Yann Duran
31

Soweit ich das beurteilen kann, ist dies in Chrome oder FireFox nicht mehr möglich. Möglicherweise ist dies im IE noch möglich (zumindest vor Edge).

Guy Schalnat
quelle
2
Dies funktioniert (zumindest) in Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> Siehe auch diesen Artikel
Hering
@hering Nun, der Artikel stammt aus dem Jahr 2006, aber wenn Sie etwas gefunden haben, das funktioniert, sind das großartige Neuigkeiten und helfen vielleicht Leuten, die so weit gelesen haben. Danke für das Teilen.
Guy Schalnat
Die Frage betraf das Schließen der aktuell aktiven Registerkarte innerhalb dieser Registerkarte. Wie Sie sagen, ist dies in Chrome oder Firefox nicht möglich. Dies sollte die akzeptierte Antwort sein.
entscheidet
14

Es ist möglich. Ich habe das ganze Netz danach durchsucht, aber als ich einmal an einer Umfrage von Microsoft teilgenommen habe, habe ich endlich die Antwort bekommen.

Versuche dies:

window.top.close();

Dadurch wird die aktuelle Registerkarte für Sie geschlossen.


quelle
12
"Skripte schließen möglicherweise nur die Fenster, die von ihm geöffnet wurden." auf Chrome 50.
Husky
7

Erfolgreich in FF 18 und Chrome 24 getestet:

In Kopf einfügen:

<script>
    function closeWindow() {
        window.open('','_parent','');
        window.close();
    }
</script> 

HTML:

<a href="javascript:closeWindow();">Close Window</a>

Credits gehen an Marcos J. Drake .

Julesfrog
quelle
Nicht auf Chrome "Scripts können nur die Fenster schließen, die von Chrome geöffnet wurden."
César León
7

Versuchen Sie dies auch. Arbeitet für mich in allen drei großen Browsern.

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>
Bhavin Shah
quelle
funktioniert nicht auf Firefox Quantum 68.0.1
Zeke
7

Folgendes funktioniert für mich in Chrome 41:

function leave() {
  var myWindow = window.open("", "_self");
  myWindow.document.write("");
  setTimeout (function() {myWindow.close();},1000);
}

Ich habe verschiedene Ideen für FF ausprobiert, einschließlich des Öffnens einer tatsächlichen Webseite, aber nichts scheint zu funktionieren. Soweit ich weiß, schließt jeder Browser einen Tab oder ein Fenster mit xxx.close (), wenn es wirklich von JS geöffnet wurde, aber FF kann zumindest nicht dazu verleitet werden, einen Tab zu schließen, indem neuer Inhalt in diesem Tab geöffnet wird.

Das ist sinnvoll, wenn Sie darüber nachdenken - ein Benutzer möchte möglicherweise nicht, dass JS einen Tab oder ein Fenster mit einem nützlichen Verlauf schließt.

Thailänder
quelle
Chrome: 'Uncaught TypeError: Die Eigenschaft' innerHTML 'von null kann nicht festgelegt werden
Francisco Corrales Morales
4

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.closein 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.

Geben Sie hier die Bildbeschreibung ein

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! :) :)

Mackey Johnstone
quelle
4

Was die Personen betrifft, die diese Seite noch besuchen, dürfen Sie nur eine Registerkarte schließen, die von einem Skript geöffnet wird, ODER indem Sie das Ankertag von HTML mit Ziel _blank verwenden. Beide können mit dem geschlossen werden

<script>
    window.close();
</script>
Killstreet
quelle
Dies funktioniert in jedem modernen Browser. IE11 und Edge 17 zeigen eine Bestätigungswarnung an, die jedoch weiterhin funktioniert.
Fabian von Ellerts
1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

Das hat die Arbeit für mich erledigt

pikax
quelle
1

ein bisschen spät, aber das habe ich herausgefunden ...

window.close()funktioniert nur (IE ist eine Ausnahme), wenn das Fenster, das Sie versuchen, close()von einem Skript mit der window.open () -Methode geöffnet wurde.

! (siehe den Kommentar von @killstreet unten zum Ankertag mit Ziel _blank)

TLDR : Chrome & Firefox ermöglichen das Schließen.

Es wird ein Konsolenfehler angezeigt: Skripte schließen möglicherweise keine Fenster, die nicht vom Skript geöffnet wurden. als Fehler und sonst nichts.

Sie können der URL einen eindeutigen Parameter hinzufügen, um festzustellen, ob die Seite über ein Skript geöffnet wurde (z. B. Zeit). Dies ist jedoch nur ein Hack und keine native Funktionalität und schlägt in einigen Fällen fehl .

Ich konnte keine Möglichkeit finden zu wissen, ob die Seite von einem open () geöffnet wurde oder nicht, und close wird keine Fehler verursachen. Dies wird NICHT "Test" drucken :

try{
  window.close();
}
catch (e){
  console.log("text");
}

Sie können in MDN mehr über die Funktion close () lesen

Calios
quelle
2
Es sind nicht nur Registerkarten, die von Skripten geöffnet wurden, sondern auch ein Ankertag mit dem Ziel _blank darf geschlossen werden. Bisher in Chrom und Firefox getestet und beide scheinen das Schließen von Registerkarten zu ermöglichen, die von einem Ankertag geöffnet wurden.
Killstreet
-1

So würden Sie einen solchen Link erstellen:

<a href="javascript:if(confirm('Close window?'))window.close()">close</a>

Eric Mickelsen
quelle
-1

Dies ist eine Möglichkeit, dasselbe zu lösen. Deklarieren Sie eine JavaScript-Funktion wie diese

<script>
  function Exit() {
     var x=confirm('Are You sure want to exit:');
     if(x) window.close();
   }
</script>

Fügen Sie dem HTML die folgende Zeile hinzu, um die Funktion mit a aufzurufen <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
Mohsin Chaudhari
quelle