У меня есть окно, содержащее iframe (того же источника), поэтому скрипты из этого iframe могут обращаться к атрибутам верхнего окна, просто ссылаясь на top.foo
.Я хочу предоставить доступ к некоторым из этих атрибутов и скрыть другие через черный список.
Это то, что я имею до сих пор:
(function(){
var private = PrivateObject;
Object.defineProperty(window, 'PrivateObject', {
get: function getter() {
if (!(getter.caller instanceof Function)) {
throw 'You can\'t access PrivateObject from the iframe';
}
return private;
},
set: function setter(x) {
if (!(setter.caller instanceof Function)) {
throw 'You can\'t access PrivateObject from the iframe';
}
private = x;
},
});
})();
Основная идея заключается в том, что f.caller instanceof Function
должен обнаруживать вызовы от сторонних оконных объектов, поскольку window1.Function !== window2.Function
.
Но этот не работает , если методы доступа вызываются из кода верхнего уровня, где f.caller === null
.Любые решения?