我通过服务器上的代理在iframe中加载网站的内容。如果我在文件顶部添加此javascript,
var top = "";
var parent = "";
我可以成功阻止网站破坏。我怎么能这样做,仍然可以在父窗口中访问函数,如下所示:
parent.my_function('this is called from inside the iframe');
答案 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
上存在parent
和window
(并且他们确实存在),则相同。
答案 1 :(得分:1)
我认为最简单的方法是将top
和parent
值存储到您只知道的变量中。
例如:
window.__myTopWindow = window.top;
window.__myParentWindow = window.parent;
window.top = window.parent = null;
当然,可以遍历window对象来发现Window对象的属性。在这种情况下,您可能需要重新分配范围,或使用Crowder的解决方案。