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.close
encabezado 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.
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! :)