最近,国内开始流行另一种流氓行为:使用框架(Frame),将你的网页嵌入它的网页中。
比如,有一家网站号称自己是"口碑聚合门户",提供全国各个网上论坛的精华内容。但是,其实它就是用框架抓取他人的网页,然后在上面加上自己的广告和站标,这同盗版书商有何不同?!
不明内情的访问者,只看到地址栏是该门户的URL,不知道真正内容部分的网页,其实来自另一个网站。
为什么我反对这种做法?
1)它故意屏蔽了被嵌入网页的网址,侵犯了原作者的著作权,以及访问者的知情权;
2)大量业者使用的是不可见框架,使得框架网页与被嵌入的网页视觉上完全相同,欺骗性极高;
3)不良业者在被嵌入网页的上方或周围附加广告(甚至病毒和木马),不仅破坏原作者的设计意图和形象,而且属于侵权利用他人资源的谋利行为;
4)如果访问者在框架内部,从一个网页点击到另一个网页,浏览器的地址栏是不变的,这是很差的用户体验,并且访问者会将这种体验归咎于原网页的作者。
如果确有必要,将他人的网页嵌入自己的框架,那么应该同时满足以下三个条件:
A. 在框架网页的醒目位置,清楚地说明该网页使用了框架技术,并明确列出原网页的URL网址。
B. 在框架网页的醒目位置,向访问者提供"移除框架"的功能。
C. 不得附加任何广告或恶意代码。
如果你经常使用Google的图片搜索,你就会知道,Google就是这样做的。
当然,流氓业者不会理睬你的正当要求。所以,我写了一段很简单的javascript代码,大家只要将它放入网页源码的头部,那些流氓就没有办法使用你的网页了。
<script type="text/javascript"> if (window!=top) // 判断当前的window对象是否是top对象 top.location.href =window.location.href; // 如果不是,将top对象的网址自动导向被嵌入网页的网址 </script>
这段代码是有效的。但是,有一个问题:使用后,任何人都无法再把你的网页嵌入框架了,包括你自己在内。
于是,我今天就在考虑,有没有一种方法,使得我的网页只能被嵌入我自己的框架,而不是别人的框架?
表面上看,这个问题很简单。只要做一个判断:当前框架和顶层框架的域名是否相同,如果答案是否,就做了一个URL重定向。
if (top.location.hostname != window.location.hostname) { top.location.href = window.location.href; }
但是,出乎意料的是,这样写是错误的,根本无法运行。你能看出,错在哪里吗?
假定 top.location.hostname 是 www.111.com,而 window.location.hostname 是 www.222.com。也就是说,111.com把222.com嵌入了它的网页中。这时,比较 top.location.hostname != window.location.hostname 会有什么结果?
浏览器会提示代码出错!
因为它们跨域(cross- domain)了,浏览器的安全政策不允许222.com的网页操作111.com的网页,反之亦然。IE把这种错误叫 做"没有权限"。进一步说,浏览器甚至不允许你查看top.location.hostname,跨域情况下,一看到这个对象,就直接报错。
那么,代码应该如何修改?
事实上,这提示我们,只要查看top.location.hostname是否报错就可以了。如果报错了,表明存在跨域,就对top对象进行URL重导向;如果不报错,表明不存在跨域(或者未使用框架),就不采取操作。
try{ top.location.hostname; } catch(e){ top.location.href = window.location.href; }
这样写已经正确了,在IE和Firefox中可以正确运行。但是,Chrome浏览器会出现错误,不知为何,在跨域情况下,Chrome对top.location.hostname不报错!
没办法,只能为了Chrome,再加一段补充代码。
try{ top.location.hostname; if (top.location.hostname != window.location.hostname) { top.location.href =window.location.href; } } catch(e){ top.location.href = window.location.href; }
好了,升级版代码完成。除了本地域名以外,其他域名一律无法将你的网页嵌入框架。我的Blog现在就使用这段代码。
原文:http://www.ruanyifeng.com/blog/2010/08/anti-frameset_javascript_codes_continued.html
转自:防止网页被嵌入框架的代码
相关推荐
还可以使用HTTP头部的X-Frame-Options响应头来设置网页是否可以被嵌入框架中,这是一种由服务器端控制的机制,通过设置该响应头为DENY或SAMEORIGIN,可以有效防止网页被其他网站嵌入。这种方法通常与JavaScript方法...
本文实例讲述了JS防止网页被嵌入iframe框架的方法。分享给大家供大家参考,具体如下: 例如: [removed] if (window!=top) // 判断当前的window对象是否是top对象 top.location.href = [removed].href; // 如果...
为了避免这种情况,网站开发者需要采取措施来防止自己的网页被嵌入框架。本文将详细介绍两种有效的方法。 方法一:使用JavaScript检测并跳出框架 这种方法基于JavaScript的条件判断,其核心代码如下: ```...
在网页框架中,`iframe`常常被用来加载独立的内容区域,例如广告、地图、视频或者跨域的数据。`iframe`的一个显著优点是它可以在不刷新整个页面的情况下更新部分内容,这在实现动态更新和模块化设计时非常有用。 在...
1.6 保护自己的网页不被放入框架.htm 1.7 打印页面的出错原因.htm 1.8 当前网页调用其他网页.htm 1.9 倒计时载入页面.htm 1.10 定义网页的关键字.htm 1.11 进入页面同时弹出欢迎对话框.htm 1.12 禁止网页另存...
5. **安全**:框架内置的安全功能,如防止SQL注入、XSS攻击,以及CSRF令牌,有助于保护应用程序免受常见网络安全威胁。 6. **依赖注入**:依赖注入允许在运行时动态地将服务提供给类,而不是硬编码依赖关系。这增强...
此外,通过JavaScript函数`oncontextmenu="return false"`和`onselectstart="return false"`可以禁用网页上的右键点击上下文菜单和文本选择功能,这对于保护网站内容不被轻易复制或防止意外操作具有一定的作用。...
**知识点解析**:与第5点类似,此脚本同样用于防止网页被嵌入到其他框架中。如果当前页面不是顶级窗口,则将顶级窗口的地址重定向为当前页面地址,以此来防止框架嵌入。 #### 7. 在不同浏览器中查看源代码 **代码...
//--></script>` 可以检查当前页面是否位于顶级窗口,如果不是,则重定向到指定页面,防止页面被他人嵌入框架中。 6. 更高级的防止被frame的技巧: `<SCRIPT LANGUAGE=javascript><!-- if (top.location != self....
` 这些脚本可以防止网站被嵌入到别人的框架中,确保用户直接访问完整页面。 7. `<noscript><iframe src=*.html></iframe></noscript>`: 通过这种方式,可以防止用户将网页另存为HTML文件,提高内容安全性。 8. ...
同时,iframe也可以帮助隔离代码执行环境,防止一个文件的错误影响到其他文件的展示。 总结,这款基于PHP的代码管理系统充分利用了Prototype库和Ajax技术,提供了便捷的代码管理功能,并结合iframe技术优化了代码的...
此代码段可以防止网页被其他网站作为框架内容显示: ```html if(top.location!=self.location) top.location=self.location; ``` ### 10. 禁止网页另存为 使用`<noscript>`标签可以阻止一些基于JavaScript的...
`Web打印控件代码.txt` 文件则可能包含了具体的JavaScript或VBScript代码,这些代码可以被嵌入到HTML页面中,用于控制打印行为。例如,它可能包含以下功能: 1. **选择打印范围**:代码可能会提供一个函数,让用户...
`:与上面类似,这段代码也用于防止网页被嵌入框架,但它直接将顶部(top)窗口重定向到当前窗口的URL。 8. `<noscript><iframe src=*.html></iframe></noscript>`:这个标签结构可以防止用户通过“另存为”功能...
此段代码用于检测当前页面是否被嵌入在其他框架中,如果发现是,则将顶级窗口的地址设置为当前页面地址,防止他人非法嵌套自己的网页。 ### 10. 替换 noscript 标签 #### 代码: ```html *.html"></iframe> ```...