我需要修复我网站的问题,并且遇到了两个类似的javascripts,应该做同样的事情来解决它:
1
此HTML代码应位于子页面的头部内容区域中:
<script language="javascript" type="text/javascript"> if(self==top) { top.location.href="/?url="+self.location.href; } </script>
并在IFRAME结束后将此脚本块放在您的BODY部分的末尾:
<script language="javascript" type="text/javascript"> if (top.location.search.substr(0,5)=="?url=") { self.frames["ifrm"].location.href = top.location.search.substr(5); } </script>
2
<script type="text/javascript">
if (self.location==top.location)
top.location.replace(‘http://contain.er/page-url/here‘);
</script>
有什么不同之处,如果存在差异,哪个会在我的情况下效果更好?
出于布局原因,我有包含iframe的顶级导航页面(Sections)。 iframe用于子导航(主题),内容页面位于其下方的第三个iframe中。不用说,来自其他域的我的主题和内容的链接不会加载到其父框架中,并且布局和导航会被破坏。这些脚本应该修复它。
如果你想亲眼看看:"My site from the top"
你可以“输入”该网站,然后导航到“吉他”然后导航到“新家园星球”,一切都很好,但这不起作用:
"Direct link to the New home planet page."
提前感谢您的帮助!
答案 0 :(得分:1)
第一个比较两个“窗口”对象self
和top
,以查看当前窗口(self
)是否是最顶层的(top
)窗口,即检查窗口是否未被框起
如果匹配,它还会使用location.href
重定向浏览器。
第二个做同样的事情,但它比较了当前窗口的window.location
对象和最顶层的窗口(self.location==top.location
)而不是直接比较窗口。
第二个使用location.replace
重定向。
与location.href
的区别仅在于历史记录,replace
不会添加历史记录条目,而只是替换当前的网址。
从功能上讲,他们做同样的事情,如果窗口没有加载到iframe中,它会被重定向到给定的URL。
但是,我不知道如何解决iFrames无法加载的问题。
答案 1 :(得分:0)
嗯,首先(我知道你没有问过),但是你的设计在1995年的尖叫声中被认为是糟糕的设计。今天,我们将使用AJAX调用完成您正在做的事情,这些调用将结果返回到单个容器元素,该元素使用CSS来处理文本溢出(这取代了各种iframe)以及您面临的整个问题。
现在,对于你的问题,两者都做同样的事情,但第二个是如何表达它正在做的事情更简洁。它已被称为&#34; Frame-Busting&#34;脚本,确保您的网站不会在某个其他网站的框架内加载。虽然,我不得不说两个剧本看起来都是错误的,因为他们在比较自我和顶部是否相等,当他们应该检查不平等时。
基本上&#34;如果当前窗口与顶部窗口不同,那么我必须在其他窗口内显示,这是不行的,所以将最顶层窗口的位置改回我原来的网站位置。
我会将两个脚本中的==更改为!=来纠正它们。
有关示例,请参阅:https://davidwalsh.name/javascript-framebuster或http://www.trans4mind.com/personal_development/JavaScript/jsFrames.htm。