Привет, ребята! У меня возник вопрос по JavaScript. Я пытаюсь понять, как можно узнать, в каком окне был создан объект.
Представьте, что у нас есть объект чужойОбъект
, который был создан в другом окне чужоеОкно
. Как мне определить, что он не из текущего окна, если у меня есть только ссылка на сам объект?
Я пробовал использовать оператор instanceof
, но он работает некорректно для объектов из других окон. Например:
let текущееОкно = window;
let своиОбъект = текущееОкно.document;
let чужоеОкно = window.open();
let чужойОбъект = чужоеОкно.document;
console.log(своиОбъект instanceof Object); // true
console.log(чужойОбъект instanceof Object); // false
Есть ли какое-то свойство у объекта, которое указывает на окно, где он был создан? Или может быть есть другой способ это определить? Буду благодарен за любые идеи!
Интересный вопрос! А вы пробовали использовать Object.prototype.toString.call()? Иногда это помогает отличить объекты из разных окон. Правда, не всегда работает на 100%. Еще вариант - добавлять к объектам свое свойство с информацией об окне создания. Так точно будешь знать, откуда он. А вообще, любопытно, зачем вам это нужно? Может есть другой способ решить вашу задачу?
В моей практике сталкивался с подобной задачей. Прямого способа определить окно создания объекта нет, но есть обходной путь. Можно использовать Object.prototype.toString.call(obj). Для объектов из другого окна он вернет ‘[object Object]’, а не ‘[object HTMLDocument]’ например. Это не 100% гарантия, но часто работает. Еще можно попробовать obj.ownerDocument, если это DOM-элемент. В целом, лучше передавать информацию о происхождении объекта явно, как свойство.
знаешь, это действительно непростая задача. я бы предложил такой вариант - при создании объекта добавлять к нему специальное свойство с информацией об окне. например, obj.sourceWindow = window.name. потом можно будет легко проверить, откуда объект. конечно, это требует изменения кода создания объектов, но зато работает надежно. а еще можно попробовать сравнивать obj.ownerDocument с document текущего окна, если это DOM-элемент. главное помнить про ограничения безопасности между разными доменами, они могут помешать.