¿Cómo cerrar la pestaña actual en una ventana del navegador?

436

Quiero crear un enlace en una página web que cierre la pestaña actualmente activa en un navegador sin cerrar otras pestañas en el navegador.
Cuando el usuario hace clic en el enlace de cierre, debe aparecer un mensaje de alerta pidiéndole que confirme con dos botones, "SÍ" y "NO". Si el usuario hace clic en "SÍ", cierre esa página y, en caso negativo, no haga nada.

¿Cómo puede hacerse esto? ¿Alguna sugerencia?

Naveed
fuente
Podría llegar tarde aquí, pero esto es impedido por los navegadores por una razón. <br> <br> Piensa en ti mismo tratando de cerrar una ventana una y otra vez y no se cierra porque está haciendo la parte " si no " de tu pregunta que es "no hacer nada". <br> <br> ¡Esto será irritante seguro!
Muhammad Osama

Respuestas:

503

Necesitará Javascript para hacer esto. Uso window.close():

close();

Nota: la pestaña actual está implícita. Esto es equivalente:

window.close();

o puede especificar una ventana diferente.

Entonces:

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>

usted return false aquí para evitar el comportamiento predeterminado del evento. De lo contrario, el navegador intentará ir a esa URL (que obviamente no es).

Ahora las opciones en el window.confirm()cuadro de diálogo serán Aceptar y Cancelar (no Sí y No). Si realmente desea Sí y No, deberá crear algún tipo de cuadro de diálogo modal de Javascript.

Nota: hay diferencias específicas del navegador con lo anterior. Si abrió la ventana con Javascript (vía window.open()), entonces puede cerrar la ventana con javascript. Firefox no le permite cerrar otras ventanas. Creo que IE le pedirá confirmación al usuario. Otros navegadores pueden variar.

cletus
fuente
387
No puede cerrar ninguna pestaña a través de JavaScript. "Este método solo se puede llamar para ventanas que fueron abiertas por un script usando el método window.open". En otras palabras, solo puede usar JavaScript para cerrar una ventana / pestaña que se generó a través de JavaScript.
Ryan Joy
77
-1 No funciona Chrome 30 PC. Las otras respuestas muestran que se abre una ventana en la pestaña actual y luego se cierra
Markasoftware
2
En about:config dom.allow_scripts_to_close_windows = truepodría ser la solución en Firefox (podría ser un gran riesgo para la seguridad!)
Nepomuk Frädrich
66
El navegador no permite este comportamiento. Javascript solo puede cerrar una pestaña que abrió.
Edward Kennedy
1
Esto funciona (al menos) en Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> consulte también este artículo
2017
247

Prueba esto

<a href="javascript:window.open('','_self').close();">close</a>
Daniel Shen
fuente
2
Trabajando en Firefox 31.0
Adrian Carr
1
El lado negativo de esta solución es que se envía una solicitud de obtención al servidor. Pero por otro lado, no he encontrado ninguna otra solución.
100r
18
Hacer esto desde la consola de Chrome genera "Los scripts pueden cerrar solo las ventanas que abrió"
Parlamento
No funciona Las secuencias de comandos pueden cerrar solo las ventanas que abrió.
Roman Losev
1
No funciona en Chrome 60.0.3079.0: "Las secuencias de comandos pueden cerrar solo las ventanas que abrió".
Our_Benefactors
65

Este método funciona en 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>
Palesz
fuente
56
Más simple:open(location, '_self').close();
uınbɐɥs
Esto funcionó bien en IE 11, pero no funcionó en Chrome 38
Yann Duran
31

Por lo que puedo decir, ya no es posible en Chrome o FireFox. Todavía puede ser posible en IE (al menos pre-Edge).

Guy Schalnat
fuente
2
Esto funciona (al menos) en Chrome 62: <button type="button" onclick="window.open('', '_self', ''); window.close();">Discard</button> consulte también este artículo
2017
@hering Bueno, el artículo es de 2006, pero si encontraste algo que funciona, es una gran noticia y quizás ayude a las personas que leen hasta aquí. Gracias por compartir.
Guy Schalnat
La pregunta era acerca de cerrar la pestaña activa actual desde esa pestaña. Como dices, no es posible en Chrome o Firefox. Esta debería ser la respuesta aceptada.
decae el
14

Es posible. Busqué esto en toda la red, pero una vez cuando tomé una de las encuestas de Microsoft, finalmente obtuve la respuesta.

prueba esto:

window.top.close();

esto cerrará la pestaña actual por ti.


fuente
12
"Los scripts pueden cerrar solo las ventanas que abrió". en Chrome 50.
Husky
7

Probado con éxito en FF 18 y Chrome 24:

Insertar en la cabeza:

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

HTML:

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

Los créditos van a Marcos J. Drake .

Julesfrog
fuente
No bromeando en Chrome "Los scripts pueden cerrar solo las ventanas que abrió".
César León
7

Prueba esto también. Trabajando para mí en los tres principales navegadores.

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

Lo siguiente funciona para mí en Chrome 41:

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

He intentado varias ideas para FF, incluida la apertura de una página web real, pero nada parece funcionar. Según tengo entendido, cualquier navegador cerrará una pestaña o ventana con xxx.close () si realmente fuera abierto por JS, pero FF, al menos, no puede ser engañado para cerrar una pestaña abriendo nuevo contenido dentro de esa pestaña.

Eso tiene sentido cuando lo piensas: un usuario puede no querer que JS cierre una pestaña o ventana que tiene un historial útil.

Tailandés
fuente
Chrome: 'Tipo de error no detectado: no se puede establecer la propiedad' innerHTML 'de nulo'
Francisco Corrales Morales
5

Perdón por la necroposición de esto, pero recientemente implementé un sitio alojado localmente que necesitaba la capacidad de cerrar la pestaña actual del navegador y encontré algunas soluciones interesantes que no están bien documentadas en ningún lugar que pude encontrar, así que me encargué de hacerlo.

Nota: Estas soluciones se realizaron teniendo en cuenta un sitio alojado localmente y (con la excepción de Edge) requieren que el navegador esté configurado específicamente, por lo que no sería ideal para sitios alojados públicamente.

Contexto: en el pasado, el script jQuerywindow.close() podía cerrar la pestaña actual sin problemas en la mayoría de los navegadores. Sin embargo, los navegadores modernos ya no admiten este script, posiblemente por razones de seguridad.

Google Chrome:

Chrome no permite que se ejecute el script window.close () y no sucede nada si intentas usarlo. Sin embargo, al usar el complemento TamperMonkey de Chrome, podemos usar el método window.close () si incluye el // @grant window.closeencabezado UserScript de TamperMonkey.

Por ejemplo, mi script (que se activa cuando se hace clic en un botón con id = 'close_page' y si se presiona 'yes' en la ventana emergente del navegador) se ve así:

// ==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: Sin embargo, esta solución solo puede cerrar la pestaña si NO es la última pestaña abierta. Entonces, efectivamente, no puede cerrar la pestaña si hace que la ventana se cierre al ser la última pestaña abierta.

Firefox

Firefox tiene una configuración avanzada que puede habilitar para permitir que los scripts cierren ventanas, lo que habilita efectivamente el window.close()método. Para habilitar esta configuración, vaya a aproximadamente: config, luego busque y encuentre la preferencia dom.allow_scripts_to_close_windows y cambie de falso a verdadero.

Esto le permite usar el window.close()método directamente en su archivo jQuery como lo haría con cualquier otro script.

Por ejemplo, este script funciona perfectamente con la preferencia establecida en verdadero:

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

Esto funciona mucho mejor que la solución alternativa de Chrome, ya que permite al usuario cerrar la pestaña actual, incluso si es la única pestaña abierta, y no requiere un complemento de terceros. Sin embargo, el único inconveniente es que también permite que este script sea ejecutado por diferentes sitios web (no solo en el que tiene la intención de usar), por lo que podría ser un peligro para la seguridad, aunque no puedo imaginar que cerrar la pestaña actual sea particularmente peligroso.

Borde:

Decepcionantemente Edge realmente realizó el mejor de los 3 navegadores que probé, y trabajé con el window.close()método sin requerir ninguna configuración. Cuando window.close()se ejecuta el script, una ventana emergente adicional le avisa que la página está intentando cerrar la pestaña actual y le pregunta si desea continuar.

ingrese la descripción de la imagen aquí

Nota final: Las soluciones para Chrome y Firefox son soluciones para algo que los navegadores deshabilitaron intencionalmente, posiblemente por razones de seguridad. Ambos también requieren que el usuario configure sus navegadores para que sean compatibles de antemano, por lo que probablemente no sean viables para sitios destinados al uso público, pero son ideales para soluciones alojadas localmente como la mía.

Espero que esto haya ayudado! :)

Mackey Johnstone
fuente
5

En cuanto a las personas que todavía visitan esta página, solo se le permite cerrar una pestaña que se abre mediante un script O mediante el uso de la etiqueta de anclaje de HTML con target _blank. Ambos pueden cerrarse usando el

<script>
    window.close();
</script>
killstreet
fuente
Esto funciona en todos los navegadores modernos. IE11 y Edge 17 muestran una alerta de confirmación pero aún funciona.
Fabian von Ellerts
1
<button class="closeButton" style="cursor: pointer" onclick="window.close();">Close Window</button>

esto hizo el trabajo por mí

pikax
fuente
1

un poco tarde pero esto es lo que descubrí ...

window.close()solo funcionará (IE es una excepción) si la ventana que está intentando close()abrir se abrió mediante un script utilizando el método window.open ().

(por favor vea el comentario de @killstreet a continuación sobre la etiqueta de anclaje con el objetivo _blank)

TLDR : Chrome y Firefox permiten cerrarlos.

obtendrá un error de consola: los scripts pueden no cerrar ventanas que no fueron abiertas por el script. como un error y nada más.

podría agregar un parámetro único en la URL para saber si la página se abrió desde un script (como time), pero es solo un truco y no una funcionalidad nativa y fallará en algunos casos.

No pude encontrar ninguna manera de saber si la página se abrió desde open () o no, y cerrar no arrojará errores. esto NO imprimirá "prueba":

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

puedes leer en MDN más sobre la función close ()

calios
fuente
2
No solo las pestañas han sido abiertas por scripts, también se permitirá cerrar una etiqueta de anclaje con _blank objetivo. Hasta ahora probado en Chrome y Firefox y ambos parecen permitir cerrar pestañas que han sido abiertas por una etiqueta de anclaje.
killstreet
-1

Así es como crearía un enlace de este tipo:

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

Eric Mickelsen
fuente
-1

Esta es una forma de resolver lo mismo, declarar una función de JavaScript como esta

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

Agregue la siguiente línea al HTML para llamar a la función usando un <button>

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