在iframe中打破父级,顶级变量以防止帧破坏,但仍然可以访问父级的功能

时间:2012-05-28 21:41:47

标签: javascript

我通过服务器上的代理在iframe中加载网站的内容。如果我在文件顶部添加此javascript,

var top = "";
var parent = "";

我可以成功阻止网站破坏。我怎么能这样做,仍然可以在父窗口中访问函数,如下所示:

parent.my_function('this is called from inside the iframe');

2 个答案:

答案 0 :(得分:1)

我完全不确定是否会覆盖这些变量必然会阻止帧破坏,但如果它对你起作用,可能是为了访问parent你可以这样做:

(function() {
    var oldParent = window.parent;

    window.parent = "";
    // ...
})();

...并在函数中访问oldParent


另外,请注意

var window.top = "";

var window.parent = "";

...都是语法错误。您使用var来声明变量,而不是命名对象的属性。

如果你处于全球范围,var top会在window上创建一个属性,如果还没有属性,但是如果已经存在(并且有),那么它就是无操作并且var部分被完全忽略(仍然处理分配部分)。如果没有语法错误,您的四行将归结为:

top = "";
parent = "";

window.top = "";
window.parent = "";

...如果top上存在parentwindow(并且他们确实存在),则相同。

答案 1 :(得分:1)

我认为最简单的方法是将topparent值存储到您只知道的变量中。

例如:

window.__myTopWindow = window.top;
window.__myParentWindow = window.parent;
window.top = window.parent = null;

当然,可以遍历window对象来发现Window对象的属性。在这种情况下,您可能需要重新分配范围,或使用Crowder的解决方案。