Come chiudere la scheda corrente in una finestra del browser?


436

Voglio creare un collegamento su una pagina Web che chiuda la scheda attualmente attiva in un browser senza chiudere altre schede nel browser.
Quando l'utente fa clic sul collegamento di chiusura, dovrebbe apparire un messaggio di avviso che chiede all'utente di confermare con due pulsanti, "SÌ" e "NO". Se l'utente fa clic su "SÌ", chiudi quella pagina e Se "NO", non fare nulla.

Come si può fare? Eventuali suggerimenti?


Potrei essere in ritardo qui, ma questo è impedito dai browser per un motivo. <br> <br> Pensa a te stesso che cerca di chiudere una finestra ancora e ancora e non si chiude mentre sta facendo la parte " se no " della tua domanda che è "non fare nulla". <br> <br> Questo sarà sicuramente irritante!
Muhammad Osama,

Risposte:


503

Per farlo dovrai avere Javascript. Utilizzare window.close():

close();

Nota: la scheda corrente è implicita. Questo è equivalente:

window.close();

oppure puoi specificare una finestra diversa.

Così:

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

con HTML:

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

o:

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

Sei return falsequi per impedire il comportamento predefinito per l'evento. Altrimenti il ​​browser tenterà di accedere a tale URL (che ovviamente non lo è).

Ora le opzioni nella window.confirm()finestra di dialogo saranno OK e Annulla (non Sì e No). Se vuoi davvero Sì e No, dovrai creare una sorta di finestra di dialogo Javascript modale.

Nota: esistono differenze specifiche per il browser con quanto sopra. Se hai aperto la finestra con Javascript (via window.open()), puoi chiudere la finestra con javascript. Firefox non ti consente di chiudere altre finestre. Credo che IE chiederà conferma all'utente. Altri browser possono variare.


387
Non è possibile chiudere alcuna scheda tramite JavaScript. "Questo metodo può essere chiamato solo per le finestre che sono state aperte da uno script usando il metodo window.open." In altre parole, è possibile utilizzare JavaScript solo per chiudere una finestra / scheda generata tramite JavaScript.
Ryan Joy,

7
-1 Non funziona Chrome 30 PC le altre risposte che mostrano per aprire una finestra nella scheda corrente e quindi chiuderlo funzionano
markasoftware

2
Nel about:config dom.allow_scripts_to_close_windows = truepotrebbe essere la soluzione in Firefox (potrebbe essere un grosso rischio per la sicurezza!)
Nepomuk Frädrich

6
Il browser non consente questo comportamento. Javascript può solo chiudere una scheda che è stata aperta.
Edward Kennedy,

1
Funziona (almeno) in Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> vedi anche questo articolo
tiene il

247

Prova questo

<a href="javascript:window.open('','_self').close();">close</a>

2
Lavorare in Firefox 31.0
Adrian Carr il

1
Il lato negativo di questa soluzione è che una richiesta get viene inviata al server. Ma dall'altra parte, non ho trovato altra soluzione.
100

18
In questo modo dalle uscite della console di Chrome "Gli script possono chiudere solo le finestre che sono state aperte da essa"
Parlamento,

Non funziona Gli script possono chiudere solo le finestre che sono state aperte da esso.
Roman Losev,

1
Non funziona in Chrome 60.0.3079.0: "Gli script possono chiudere solo le finestre che sono state aperte da esso."
Our_Benefactors

65

Questo metodo funziona in Chrome e 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>

56
open(location, '_self').close();
Più

Questo ha funzionato bene in IE 11, ma non ha funzionato in Chrome 38
Yann Duran,

31

Per quanto ne so, non è più possibile in Chrome o FireFox. Potrebbe essere ancora possibile in IE (almeno pre-Edge).


2
Funziona (almeno) in Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> vedi anche questo articolo
tiene il

@hering Bene, l'articolo è del 2006, ma se hai trovato qualcosa che funziona, è un'ottima notizia e forse aiuterà le persone che leggono così lontano. Grazie per la condivisione.
Guy Schalnat,

La domanda riguardava la chiusura della scheda attiva corrente da quella scheda. Come dici tu, non è possibile su Chrome o Firefox. Questa dovrebbe essere la risposta accettata.
decide il

14

È possibile. Ho cercato su tutta la rete per questo, ma una volta quando ho preso uno dei sondaggi di Microsoft, ho finalmente ottenuto la risposta.

prova questo:

window.top.close();

questo chiuderà la scheda corrente per te.


12
"Gli script possono chiudere solo le finestre che sono state aperte da esso." su Chrome 50.
Husky,

7

Testato con successo in FF 18 e Chrome 24:

Inserire in testa:

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

HTML:

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

I crediti vanno a Marcos J. Drake .


Non scrivere su Chrome "Gli script possono chiudere solo le finestre che sono state aperte da esso."
César León,

7

Prova anche questo. Lavorando per me su tutti e tre i principali browser.

<!-- saved from url=(0014)about:internet -->
<a href="#" onclick="javascript:window.close();opener.window.focus();" >Close Window</a>

non funziona su Firefox Quantum 68.0.1
Zeke

7

Quanto segue funziona per me in Chrome 41:

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

Ho provato diverse idee per FF tra cui l'apertura di una vera pagina Web, ma nulla sembra funzionare. Per quanto ho capito, qualsiasi browser chiuderà una scheda o una finestra con xxx.close () se è stato realmente aperto da JS, ma almeno FF non può essere ingannato chiudendo una scheda aprendo nuovi contenuti all'interno di quella scheda.

Ciò ha senso se ci pensi: un utente potrebbe non voler chiudere JS con una scheda o una finestra con una cronologia utile.


Chrome: "Uncaught TypeError: impossibile impostare la proprietà" innerHTML "di null"
Francisco Corrales Morales,

5

Ci scusiamo per il necroposting, ma di recente ho implementato un sito ospitato localmente che aveva avuto la necessità di chiudere la scheda del browser corrente e ho trovato alcune soluzioni alternative che non sono ben documentate ovunque io possa trovare, quindi ho accettato me stesso per farlo.

Nota: queste soluzioni alternative sono state eseguite pensando a un sito ospitato localmente e (ad eccezione di Edge) richiedono che il browser sia specificamente configurato, quindi non sarebbe l'ideale per i siti ospitati pubblicamente.

Contesto: in passato lo script jQuery window.close()era in grado di chiudere la scheda corrente senza problemi sulla maggior parte dei browser. Tuttavia, i browser moderni non supportano più questo script, potenzialmente per motivi di sicurezza.

Google Chrome:

Chrome non consente l'esecuzione dello script window.close () e non si verifica nulla se si tenta di utilizzarlo. Utilizzando il plugin Chrome TamperMonkey, tuttavia, possiamo usare il metodo window.close () se includi l' // @grant window.closeintestazione UserScript di TamperMonkey.

Ad esempio, il mio script (che viene attivato quando si fa clic su un pulsante con id = 'close_page' e se si preme 'yes' sul popup del browser) appare come:

// ==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();
        }
    });
})();

Nota: questa soluzione può chiudere la scheda solo se NON è l'ultima scheda aperta. In modo così efficace, non può chiudere la scheda se causerebbe la chiusura della finestra essendo l'ultima scheda aperta.

Firefox:

Firefox ha un'impostazione avanzata che puoi abilitare per consentire agli script di chiudere Windows, abilitando efficacemente il window.close()metodo. Per abilitare questa impostazione vai su about: config quindi cerca e trova la preferenza dom.allow_scripts_to_close_windows e passa da falso a vero.

Ciò ti consente di utilizzare il window.close()metodo direttamente nel tuo file jQuery come faresti con qualsiasi altro script.

Ad esempio, questo script funziona perfettamente con la preferenza impostata su true:

<script>
  $("#close_page").click(function() {
    var confirm_result = confirm("Are you sure you want to quit?");
    if (confirm_result == true) {
      window.close();
    }
  });
</script>

Funziona molto meglio della soluzione alternativa di Chrome in quanto consente all'utente di chiudere la scheda corrente anche se è l'unica scheda aperta e non richiede un plug-in di terze parti. L'unico aspetto negativo è che consente anche a questo script di essere eseguito da diversi siti Web (non solo quello su cui si intende utilizzarlo), quindi potrebbe essere potenzialmente un rischio per la sicurezza, anche se non posso immaginare che chiudere la scheda corrente sia particolarmente pericoloso.

Bordo:

Deludentemente Edge ha effettivamente offerto il meglio di tutti e 3 i browser che ho provato e ha lavorato con il window.close()metodo senza richiedere alcuna configurazione. Quando window.close()viene eseguito lo script, un popup aggiuntivo avvisa che la pagina sta tentando di chiudere la scheda corrente e chiede se si desidera continuare.

inserisci qui la descrizione dell'immagine

Nota finale: Le soluzioni per Chrome e Firefox sono soluzioni alternative per qualcosa che i browser hanno disabilitato intenzionalmente, potenzialmente per motivi di sicurezza. Entrambi richiedono inoltre all'utente di configurare prima i propri browser in modo che siano compatibili prima, quindi probabilmente non sarebbero fattibili per siti destinati all'uso pubblico, ma sono ideali per soluzioni ospitate localmente come la mia.

Spero che questo abbia aiutato! :)


5

Per quanto riguarda le persone che stanno ancora visitando questa pagina, è consentito chiudere una scheda aperta da uno script OPPURE utilizzando il tag anchor di HTML con target _blank. Entrambi possono essere chiusi usando il

<script>
    window.close();
</script>

Funziona con tutti i browser moderni. IE11 e Edge 17 mostrano un avviso di conferma ma funziona ancora.
Fabian von Ellerts,

1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

questo ha funzionato per me


1

un po 'in ritardo ma questo è quello che ho scoperto ...

window.close()funzionerà (IE è un'eccezione) se la finestra che stai cercando è close()stata aperta da uno script usando il metodo window.open ().

! (vedi sotto il commento di @killstreet sull'etichetta di ancoraggio con target _blank)

TLDR : chrome e firefox consentono di chiuderli.

si otterrà un errore della console: gli script potrebbero non chiudere le finestre che non sono state aperte dallo script. come errore e nient'altro.

potresti aggiungere un parametro univoco nell'URL per sapere se la pagina è stata aperta da uno script (come il tempo) - ma è solo un hack e non una funzionalità nativa e in alcuni casi fallirà .

non sono riuscito a trovare alcun modo per sapere se la pagina è stata aperta da open () o no, e la chiusura non genererà errori. questo NON stamperà "test":

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

puoi leggere di più in MDN sulla funzione close ()


2
Non sono solo le schede che sono state aperte dagli script, ma sarà anche possibile chiudere un tag di ancoraggio con target _blank. Finora testato in Chrome e Firefox ed entrambi sembrano consentire di chiudere le schede che sono state aperte da un tag di ancoraggio.
killstreet,

-1

Ecco come creeresti un tale collegamento:

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


-1

Questo è un modo per risolvere lo stesso, dichiarare una funzione JavaScript come questa

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

Aggiungi la seguente riga all'HTML per chiamare la funzione usando a <button>

<button name='closeIt' onClick="Exit()" >Click to exit </Button>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.