Ich habe ein Fenster, das einen iframe enthält (gleicher Ursprung), so dass Skripte aus diesem iframe auf die Attribute des oberen Fensters zugreifen können, indem sie einfach auf die top.foo
. Ich möchte Zugang zu einigen dieser Attribute gewähren und andere über eine schwarze Liste ausblenden.
Dies ist mein bisheriger Stand:
(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;
},
});
})();
Die Grundidee dahinter ist, dass f.caller instanceof Function
sollte Aufrufe von fremden Fensterobjekten erkennen, da window1.Function !== window2.Function
.
Aber diese funktioniert nicht wenn die Accessoren von Top-Level-Code aufgerufen werden, wobei f.caller === null
. Gibt es Lösungen?