Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

373
Vistas
¿Cómo verificar si el objeto JavaScript se creó en la ventana actual o en otra ventana?

Digamos que tengo un objeto OtherObj que se creó en una ventana OtherWindow que es diferente de la actual ThisWindow :

 const ThisWindow = window; const ThisObj = ThisWindow.history; const OtherWindow = window.open(); const OtherObj = OtherWindow.history; console.log(ThisObj instanceof Object); //true console.log(OtherObj instanceof Object); //false console.log(OtherObj instanceof OtherWindow.Object); //true, but this method only if I already have a reference to OtherWindow

Ahora imagine si solo tengo una referencia a OtherObj , ¿hay alguna forma de obtener la ventana que se usó para crearla? ¿Quizás hay una propiedad en OtherObj que contiene una referencia a la ventana en la que se creó?

Actualmente estoy tratando de encontrar una forma de ventana cruzada para usar el operador instanceof . Como puede ver en el ejemplo de código, [variable] instanceof Object devolverá false si la variable apunta a un objeto creado fuera de la ventana actual.

Algunos de ustedes podrían decir que solo use OtherObj instanceof OtherWindow.Object (que devuelve true ), pero eso solo funciona si ya tengo una referencia a OtherWindow . Mi pregunta es suponiendo que aún no tengo una referencia a OtherWindow .

¿Hay alguna propiedad en algún lugar de OtherObj que apunte a la ventana que la creó?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Respuesta corta:

 const OtherWindow = OtherObj.constructor.constructor('return window')();

Respuesta larga:

Debido a que la mayoría de las cosas son un objeto en JavaScript, puede acceder a su constructor con Object.getPrototypeOf(ObjectIn).constructor , desde el prototipo de objetos. Pero debido a la cadena de prototipos ObjectIn.constructor tiene el mismo efecto.
Y como ese constructor es una función, su constructor es Function . Y una vez que tenemos Function , podemos acceder a todo desde esa ventana con Function('return ...')() .

Entonces, una implementación para obtener Function podría ser la siguiente:

 const getFunction = (ObjectIn) => { // Get ObjectIn's constructor const ObjectInConstructor = ObjectIn.constructor; // Get Function return ObjectInConstructor.constructor; }; const getObject = (ObjectIn) => { const Function = getFunction(ObjectIn); return Function('return Object')(); }; const OtherWindowObject = getObject(OtherObj); const OtherWindow = getFunction(OtherObj)('return window')();

Debido a que los encabezados HTTP de StackOverflow no permiten open() , he creado un violín para demostrarlo.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda