Как определить, в каком окне создан объект JavaScript?

Привет, ребята! У меня возник вопрос по 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-элемент. главное помнить про ограничения безопасности между разными доменами, они могут помешать.