Deseo obtener las referencias de todas las ventanas secundarias ya abiertas. ¿hay alguna manera? No estoy usando child = window.open(....)
simplemente usando window.open(....)
y abriendo múltiples ventanas secundarias.Cómo obtener las referencias de todas las ventanas secundarias ya abiertas
Respuesta
Si no desea cambiar su código actual, sólo tiene que anular window.open()
función:
var openedWindows = [];
window._open = window.open; // saving original function
window.open = function(url,name,params){
openedWindows.push(window._open(url,name,params));
// you can store names also...
}
Ejecutar este código antes de llamar window.open()
. Todas las referencias a las ventanas abiertas se almacenarán en la matriz openedWindows
. Puede acceder a ellos en cualquier lugar que desee
¡Voto por el buen truco! – rahulmohan
@Govind: una advertencia para esta solución: es un truco y es mejor evitarlo para evitar futuros problemas de mantenimiento. Ver: http://stackoverflow.com/questions/6223449/why-is-it-frowned-upon-to-modify-javascript-objects-prototypes/6223589#6223589 – rahulmohan
¡seguro! para evitar problemas futuros, es mejor renombrar la función que escribí a algo como 'window.open2()' :) Y cambiar todas las llamadas '.open()' existentes a '.open2()'. Pero parece que @Govind no quiere cambiar nada en sus códigos ... –
No creo que pueda, a menos que sepa los nombres de las ventanas, que supongo que no. (Si usted sabe sus nombres, puede utilizar window.open("", "name")
para obtener una referencia a ellos.)
La mejor opción es, por supuesto, para recordar la referencia de regresar de window.open
en el primer lugar — pero ya se sabe que. :-)
+1 buena respuesta, pero tengo un requisito de este tipo de enfoque. –
@Govind: Entendido. Lamentablemente, salvo guardar el valor de retorno o conocer los nombres asignados para que pueda recuperarlos más tarde con 'window.open (" "," name ")', no creo que haya una tercera alternativa. –
Ok, utilicé las respuestas a esta pregunta en Oracle CRM onDemand para desactivar una selección en una ventana emergente ejecutando el script desde la ventana primaria, ¡y funcionó! (No tengo ningún control sobre la generación de ventanas emergentes, que se abren en el marco de la aplicación)
Vamos a ver cómo lo hice:
Contexto: En una página de detalles el usuario puede añadir algo de información por hacer clic en un ícono de lupa >>> se abre una nueva ventana que contiene un formulario de búsqueda, pero una selección molesta al administrador: ¡Si el usuario cambia su valor predeterminado, obtendrá acceso a los registros prohibidos! ¡Oh Dios mío!
Primera aproximación: Deshabilitar que seleccione ahora!
Intento: Encontré attrib onclick de la imagen con las herramientas de desarrollo de mi navegador (F12). Había un método openAssocPopup, y luego sabía el nombre de la ventana secundaria: 'OccamPopup1' :)
¡Bien! Así que vamos a hacer un poco de magia (ejecutado en la ventana principal):
window.open("","OccamPopup1").document.getElementById("frmSearch.AQ").setAttribute("disabled", true);
creo que esto puede ayudar, ya que esta cuestión ayudó a mí también. Usted tenía razón. Ahora estoy tratando de envolver el objeto del documento del niño dentro del objeto jQuery del padre para poder obtener acceso al DOM completo del niño ... pero esta es otra historia ...
Esto no impide que un usuario cambie el valor del campo, ya sea usando Javascript (por ejemplo, desde la barra de URL) o usando las herramientas de desarrollo de la misma forma que lo hizo para encontrar el campo. Si es posible, los "registros prohibidos" deben evitarse con un código del lado del servidor. Sé que estoy respondiendo a una publicación anterior, y me imagino que ha considerado estas posibilidades y ha tomado la única solución disponible. Sin embargo, creo que es importante que otros que se den cuenta de esto estén conscientes del riesgo de las protecciones solo para el lado del cliente. – SimeonJM
Sí, tiene razón ... pero ... 1.- Oracle CRM onDemand está en la nube, y cambiamos las cosas por medio de jQuery siempre que solo tengamos algunas herramientas limitadas para personalizar la funcionalidad. 2.-Los usuarios son novatos, o nerds de Javascript ... casi todos ... supongo que no pierden el tiempo pirateando el CRM como nosotros (somos sus proveedores, el equipo de desarrollo) ... y no lo hago Me importa si lo hacen ...: P ¡GRACIAS! –
Sería mejor nombrar las ventanas usando un prefijo y un contador.
que necesitaba para detectar si una ventana llamada (es decir CBCheckout) ya estaba abierta y se utiliza esto:
var signupWindow = window.open('','CBCheckout','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1,height=1');
try {
if (signupWindow.document.location.href == "about:blank") {
signupWindow.close();
signupWindow = undefined;
}
} catch (e) { }
Este recapturados la referencia a la ventana abierta llamada. Si no existiera, verías una pequeña ventana emergente por un segundo.
Si conoce los nombres posibles de las ventanas, puede recorrer los nombres, intentando ubicarlas.
- 1. minimizar todas las ventanas abiertas en C#
- 2. ¿Puedes cerrar todas las ventanas abiertas en capibara?
- 3. ¿Cómo obtener una lista de todas las NSWindow abiertas desde todas las aplicaciones en ejecución?
- 4. Obtener ubicación y el tamaño de todas las ventanas abiertas utilizando .NET (C#)
- 5. Windows: ¿cómo obtener una lista de todas las ventanas visibles?
- 6. Guardar todas las ventanas/pestañas en GVim
- 7. Cómo obtener la lista de ventanas abiertas desde xserver
- 8. Enviando un mensaje a todas las ventanas/pestañas abiertas usando JavaScript
- 9. Backbone.js - Eliminar todas las vistas secundarias
- 10. Establecer GestureDetector en todas las vistas secundarias
- 11. Obtener identificadores para todas las ventanas de un proceso
- 12. ¿Cómo puedo detectar cuándo se abren nuevas ventanas y/u obtener una lista de ventanas abiertas?
- 13. WM_EX_TRANSPARENT no vuelve a pintar las ventanas secundarias
- 14. Eclipse ya no resalta las referencias
- 15. ¿Cómo puedo obtener las ventanas secundarias de una ventana dado su HWND?
- 16. Obtener todas las filas en la tabla "actual", y no desde las tablas secundarias
- 17. Oracle todas las referencias de clave externa
- 18. Buscar todas las referencias para ver
- 19. ¿Cómo cierro todas las pestañas abiertas a la vez?
- 20. Quitar todas las vistas secundarias de la vista
- 21. ¿Cómo obtener una lista de todas las formas abiertas de mi software?
- 22. Obtenga la lista de ventanas abiertas C#
- 23. Resalta todas las referencias a X?
- 24. Encontrar todas las referencias en Eclipse
- 25. Linq a SQL C# Obtenga productos en todas las categorías secundarias/secundarias demasiado lentas
- 26. ¿Cómo enumerar todas las ventanas dentro de un proceso?
- 27. Obtener todas las columnas de todas las tablas MySQL
- 28. ¿Cómo obtengo las asas de todas las figuras abiertas en MATLAB
- 29. ¿Cómo eliminar todas las referencias de un objeto en Python?
- 30. ¿Cómo puedo enumerar las ventanas abiertas (~ EnumWindows) de otra sesión de usuario?
Si no los almacena cuando los crea, demasiado tarde. – RobG