Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

384
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda