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?
javascript
html
hyperlink
Naveed
quelle
quelle
Antworten:
Dazu benötigen Sie Javascript. Verwendung
window.close()
:Hinweis: Die aktuelle Registerkarte ist impliziert. Dies ist äquivalent:
oder Sie können ein anderes Fenster angeben.
Damit:
mit HTML:
oder:
Sie
return false
hier, 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.quelle
about:config
dom.allow_scripts_to_close_windows = true
könnte die Lösung in Firefox sein (könnte ein großes Sicherheitsrisiko sein!)<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button>
Siehe auch diesen ArtikelVersuche dies
quelle
Diese Methode funktioniert in Chrome und IE:
quelle
open(location, '_self').close();
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).
quelle
<button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button>
Siehe auch diesen ArtikelEs 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:
Dadurch wird die aktuelle Registerkarte für Sie geschlossen.
quelle
Erfolgreich in FF 18 und Chrome 24 getestet:
In Kopf einfügen:
HTML:
Credits gehen an Marcos J. Drake .
quelle
Versuchen Sie dies auch. Arbeitet für mich in allen drei großen Browsern.
quelle
Folgendes funktioniert für mich in Chrome 41:
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.
quelle
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-Skript
window.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:
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:
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 daswindow.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! :) :)
quelle
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
quelle
Das hat die Arbeit für mich erledigt
quelle
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 :
Sie können in MDN mehr über die Funktion close () lesen
quelle
So würden Sie einen solchen Link erstellen:
<a href="javascript:if(confirm('Close window?'))window.close()">close</a>
quelle
Dies ist eine Möglichkeit, dasselbe zu lösen. Deklarieren Sie eine JavaScript-Funktion wie diese
Fügen Sie dem HTML die folgende Zeile hinzu, um die Funktion mit a aufzurufen
<button>
quelle