我有一個包含iframe(相同來源)的窗口,因此來自此iframe的腳本可以通過簡單引用top.foo
來訪問頂層窗口的屬性。我想授予對這些屬性的訪問權限,並通過黑名單隱藏其他屬性。從iframe中的腳本隱藏對象的某些屬性
這是我到目前爲止有:
(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
。
但是這does not work如果訪問器是從頂級代碼調用,其中f.caller === null
。任何解決方案
對不起,如果是天真的,但如果.caller爲null不會從頂級代碼工作?異常不會被拋出? – dave 2012-03-12 19:31:10
問題是,用這種方法你會得到誤報和誤報。所以我正在尋找一種解決方案,允許從父級的頂級代碼訪問,同時阻止訪問iframe的頂級代碼。 – user123444555621 2012-03-12 20:50:03