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
この方法では、偽陽性と偽陰性を得るという問題があります。だから、iframeのトップレベルコードからのアクセスをブロックしながら、親のトップレベルコードからのアクセスを許可するソリューションを探しています。 – user123444555621