were ventana the that scripts opened only may funciona close chrome cerrar automaticamente javascript google-chrome greasemonkey tampermonkey

javascript - the - window.close y self.close no cierran la ventana en Chrome



window.close() chrome (11)

Chrome Se corrigieron los problemas de seguridad en la versión 36.0.1985.125

Chrome 36.0.1985.125 MIÉRCOLES, 16 DE JULIO DE 2014 Nota de publicación

Según mi observación, esta actualización solucionó el problema al usar window.close() para cerrar la ventana emergente. Verá esto en la consola cuando falle, "Las secuencias de comandos pueden cerrar solo las ventanas que se abrieron". Eso significa que las soluciones temporales hacky (respuesta de Brock Adams) pueden no funcionar en la última versión.

Por lo tanto, en las versiones anteriores de Chrome publicadas, el siguiente bloque de código puede funcionar, pero no con esta actualización.

window.open('''', ''_self'', ''''); window.close();

Para esta actualización, debe actualizar su código en consecuencia para cerrar la ventana emergente. Una de las soluciones es tomar la identificación de la ventana emergente y usar

chrome.windows.remove(integer windowId, function callback)

método para eliminarlo. La API de Windows de extensión de Chrome se puede encontrar en chrome.windows .

En realidad, mi extensión de Chrome MarkView estaba enfrentando este problema y tuve que actualizar mi código para que funcione para esta Actualización de Chrome. Por cierto, MarkView es una herramienta para leer y escribir Awesome Markdown Files, que ofrece características que incluyen el esquema de contenido, las tablas ordenables y el resaltado de sintaxis del bloque de código con el número de línea.

También creé esta publicación , cualquier comentario es bienvenido.

El problema es que cuando invoco window.close() o self.close() no cierra la ventana. Ahora parece existir la creencia de que en Chrome no se puede cerrar por script ninguna ventana que no sea un script creado. Eso es evidentemente falso, pero independientemente de que se supone que todavía lo haga, incluso si se requiere para mostrar una alerta para confirmar. Esto no está sucediendo

Entonces, ¿alguien tiene un método real, funcional y probado de cerrar una ventana usando algo como javascript:window.close() o javascript:self.close() que realmente hace lo que se espera y algo que sucede muy bien en cada navegador que NO es Basado en Chrome? Cualquier sugerencia sería muy apreciada y estoy buscando una solución específica para Javascript, nada de JQuery o implementación de terceros.

Actualización: Si bien gran parte de lo que se ha sugerido tiene serias limitaciones y problemas de usabilidad, la sugerencia más reciente (específica de TamperMonkey) que utiliza // @grant window.close en el encabezado de la secuencia de comandos a menudo servirá de truco incluso en aquellas pestañas que normalmente no pueden manejar el método de cierre. Si bien no es del todo ideal y no se generaliza en todos los casos, es una buena solución en mi caso.


A pesar de pensar que es "evidentemente falso", lo que dices "parece ser una creencia" es en realidad correcto. La documentación de Mozilla para window.close dice

Solo se permite llamar a este método para las ventanas que fueron abiertas por una secuencia de comandos utilizando el método window.open. Si un script no abrió la ventana, aparece el siguiente error en la consola de JavaScript: Los scripts no pueden cerrar las ventanas que no fueron abiertas por el script

Usted dice que "se supone que todavía lo hace", pero no creo que encuentre ninguna referencia que lo respalde, ¿tal vez ha olvidado algo?


El siguiente código funcionó para mí:

window.open(''location'', ''_self'', ''''); window.close();

Probado en Chrome 43.0.2357.81


En tampermonkey ahora puedes usar

// @grant window.close

Y luego simplemente llame

window.close();


Encontré una nueva forma que funciona para mí perfetly

var win = window.open("about:blank", "_self"); win.close();


Esto podría ser viejo, pero vamos a responderlo.

Uso top.close () para cerrar una pestaña. window.close () u otro abierto ... cerrar no funcionó para mí.


Estoy usando el método publicado por Brock Adams e incluso funciona en Firefox, si es iniciado por el usuario.

open(location, ''_self'').close();

Lo estoy llamando desde la pulsación de un botón para que el usuario lo inicie , y todavía funciona bien con Chrome 35-40, Internet Explorer 11, Safari 7-8 y ALSO Firefox 29-35. Probé usando la versión 8.1 de Windows y Mac OS X 10.6, 10.9 y 10.10 si eso es diferente.

El código completo:

HTML:

<input type="button" name="Quit" id="Quit" value="Quit" onclick="return quitBox(''quit'');" />

JavaScript:

function quitBox(cmd) { if (cmd==''quit'') { open(location, ''_self'').close(); } return false; }

Pruebe esta página de prueba: (ahora probado en Chrome 40 y Firefox 35)

http://browserstrangeness.bitbucket.io/window_close_tester.htm


JavaScript ordinario no puede cerrar windows willy-nilly. Esta es una característica de seguridad, introducida hace un tiempo, para detener varios ataques maliciosos y molestias.

De la última especificación de trabajo para window.close() :

El método close() en objetos de ventana debería, si se cumplen todas las condiciones siguientes, cerrar el contexto de exploración A :

  • El contexto de exploración correspondiente A es un script que se puede cerrar .
  • El contexto de exploración del script actual está familiarizado con el contexto de navegación A.
  • El contexto de exploración de la secuencia de comandos actual se permite navegar el contexto de exploración A.

Un contexto de exploración se puede cerrar mediante un script si es un contexto de exploración auxiliar creado por un script (a diferencia de una acción del usuario), o si se trata de un contexto de exploración cuyo historial de sesión contiene solo un documento.

Esto significa que, con una pequeña excepción, no se debe permitir que javascript cierre una ventana que no abrió ese mismo javascript.

Chrome permite esa excepción, que no se aplica a las secuencias de comandos del usuario, sin embargo, Firefox no lo hace. La implementación de Firefox declara :

Solo se permite llamar a este método para las ventanas que fueron abiertas por una secuencia de comandos utilizando el método window.open .

Si intentas usar window.close desde una Greasemonkey / Tampermonkey / userscript obtendrás:
Firefox: el mensaje de error "Las Scripts may not close windows that were not opened by script. " Scripts may not close windows that were not opened by script.
Chrome: simplemente falla silenciosamente.


La solución a largo plazo:

La mejor forma de lidiar con esto es hacer una extensión de Chrome y / o un complemento de Firefox. Estos pueden cerrar de manera confiable la ventana actual.

Sin embargo, dado que los riesgos de seguridad, planteados por window.close , son mucho menos para un script de Greasemonkey / Tampermonkey; Greasemonkey y Tampermonkey podrían razonablemente proporcionar esta funcionalidad en su API (esencialmente empaquetando el trabajo de extensión para usted).
Considere hacer una solicitud de función.


Las soluciones alternativas hacky:

Actualmente, Chrome es vulnerable al exploit "auto redirección". Entonces, un código como este solía funcionar en general:

open(location, ''_self'').close();

Esto es un comportamiento con errores, OMI, y ahora (hasta aproximadamente abril de 2015) está bloqueado en su mayoría. Seguirá funcionando a partir del código inyectado solo si la pestaña está recién abierta y no tiene páginas en el historial de navegación. Entonces solo es útil en un conjunto muy pequeño de circunstancias.

Sin embargo, una variación aún funciona en Chrome (v43 y v44) más Tampermonkey (v3.11 o posterior) . Use un explícito @grant y plain window.close() . P.EJ:

// ==UserScript== // @name window.close demo // @include http://YOUR_SERVER.COM/YOUR_PATH/* // @grant GM_addStyle // ==/UserScript== setTimeout (window.close, 5000);

Gracias a zanetu por la actualización. Tenga en cuenta que esto no funcionará si solo hay una pestaña abierta. Solo cierra pestañas adicionales.


Firefox está seguro contra ese exploit. Por lo tanto, la única forma de javascript es paralizar la configuración de seguridad, un navegador a la vez.

Puede abrir about:config y establecer
allow_scripts_to_close_windows a true .

Si el script es para uso personal, adelante y hazlo. Si le pides a alguien más que active esa configuración, sería inteligente y justificado que declinara con prejuicios.

Actualmente no hay una configuración equivalente para Chrome.


Muchas personas todavía están tratando de encontrar una forma de cerrar el navegador Chrome usando javascript. El siguiente método solo funciona cuando usas Chrome como iniciador de aplicaciones, ¡kiosco, por ejemplo!

He probado lo siguiente:

Estoy usando la siguiente extensión: Cerrar Kiosco

Estoy siguiendo las instrucciones de uso y parece funcionar bien (asegúrate de borrar el caché mientras realizas las pruebas). El javascript que uso es (adjunto al evento click):

window.location.href = ''/closekiosk'';

Espero que eso ayude a alguien, ya que es la única solución de trabajo que he encontrado.

Nota: parece que la extensión se ejecuta en segundo plano y agrega un ícono de bandeja de Chrome. Tiene la siguiente opción marcada: "Permitir que Chrome se ejecute en segundo plano" (o texto similar). Es posible que deba jugar con él, hasta que funcione para usted. Lo desmarqué y ahora funciona bien.


Pruebe algo como esto onclick = "return self.close ()"


Solo si abre una nueva ventana usando window.open () la nueva ventana podrá cerrarse usando el código como he mencionado anteriormente. Esto funciona perfectamente para mí :) Nota: Nunca use href para abrir la página en una pestaña nueva. Window.close () no funciona con "href". Use window.open () en su lugar.