两个不同的java脚本做同样的事情?

时间:2016-01-28 21:06:23

标签: javascript iframe hyperlink

我需要修复我网站的问题,并且遇到了两个类似的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."

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

第一个比较两个“窗口”对象selftop,以查看当前窗口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-framebusterhttp://www.trans4mind.com/personal_development/JavaScript/jsFrames.htm