`
天梯梦
  • 浏览: 13729696 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

防止网页被嵌入框架的代码

 
阅读更多

最近,国内开始流行另一种流氓行为:使用框架(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

转自:防止网页被嵌入框架的代码

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    JavaScript实现防止网页被嵌入Frame框架的代码分享

    还可以使用HTTP头部的X-Frame-Options响应头来设置网页是否可以被嵌入框架中,这是一种由服务器端控制的机制,通过设置该响应头为DENY或SAMEORIGIN,可以有效防止网页被其他网站嵌入。这种方法通常与JavaScript方法...

    JS防止网页被嵌入iframe框架的方法分析

    本文实例讲述了JS防止网页被嵌入iframe框架的方法。分享给大家供大家参考,具体如下: 例如: [removed] if (window!=top) // 判断当前的window对象是否是top对象 top.location.href = [removed].href; // 如果...

    如何屏蔽防止别的网站嵌入框架代码

    为了避免这种情况,网站开发者需要采取措施来防止自己的网页被嵌入框架。本文将详细介绍两种有效的方法。 方法一:使用JavaScript检测并跳出框架 这种方法基于JavaScript的条件判断,其核心代码如下: ```...

    一个简单实用的网页框架

    在网页框架中,`iframe`常常被用来加载独立的内容区域,例如广告、地图、视频或者跨域的数据。`iframe`的一个显著优点是它可以在不刷新整个页面的情况下更新部分内容,这在实现动态更新和模块化设计时非常有用。 在...

    500多个html网页格式的各种源代码

    1.6 保护自己的网页不被放入框架.htm 1.7 打印页面的出错原因.htm 1.8 当前网页调用其他网页.htm 1.9 倒计时载入页面.htm 1.10 定义网页的关键字.htm 1.11 进入页面同时弹出欢迎对话框.htm 1.12 禁止网页另存...

    PHP框架代码,可以看一下

    5. **安全**:框架内置的安全功能,如防止SQL注入、XSS攻击,以及CSRF令牌,有助于保护应用程序免受常见网络安全威胁。 6. **依赖注入**:依赖注入允许在运行时动态地将服务提供给类,而不是硬编码依赖关系。这增强...

    网页制作常用代码

    此外,通过JavaScript函数`oncontextmenu="return false"`和`onselectstart="return false"`可以禁用网页上的右键点击上下文菜单和文本选择功能,这对于保护网站内容不被轻易复制或防止意外操作具有一定的作用。...

    网页制作精华代码大全

    **知识点解析**:与第5点类似,此脚本同样用于防止网页被嵌入到其他框架中。如果当前页面不是顶级窗口,则将顶级窗口的地址重定向为当前页面地址,以此来防止框架嵌入。 #### 7. 在不同浏览器中查看源代码 **代码...

    网页制作--经典代码

    //--&gt;&lt;/script&gt;` 可以检查当前页面是否位于顶级窗口,如果不是,则重定向到指定页面,防止页面被他人嵌入框架中。 6. 更高级的防止被frame的技巧: `&lt;SCRIPT LANGUAGE=javascript&gt;&lt;!-- if (top.location != self....

    网页代码大全

    ` 这些脚本可以防止网站被嵌入到别人的框架中,确保用户直接访问完整页面。 7. `&lt;noscript&gt;&lt;iframe src=*.html&gt;&lt;/iframe&gt;&lt;/noscript&gt;`: 通过这种方式,可以防止用户将网页另存为HTML文件,提高内容安全性。 8. ...

    php代码管理系统 管理你自己的代码

    同时,iframe也可以帮助隔离代码执行环境,防止一个文件的错误影响到其他文件的展示。 总结,这款基于PHP的代码管理系统充分利用了Prototype库和Ajax技术,提供了便捷的代码管理功能,并结合iframe技术优化了代码的...

    网页经典代码集 高手必学 网页经典代码集 高手必学

    此代码段可以防止网页被其他网站作为框架内容显示: ```html if(top.location!=self.location) top.location=self.location; ``` ### 10. 禁止网页另存为 使用`&lt;noscript&gt;`标签可以阻止一些基于JavaScript的...

    Web打印控件代码-可打框架内容

    `Web打印控件代码.txt` 文件则可能包含了具体的JavaScript或VBScript代码,这些代码可以被嵌入到HTML页面中,用于控制打印行为。例如,它可能包含以下功能: 1. **选择打印范围**:代码可能会提供一个函数,让用户...

    40个网页常用小代码.pdf

    `:与上面类似,这段代码也用于防止网页被嵌入框架,但它直接将顶部(top)窗口重定向到当前窗口的URL。 8. `&lt;noscript&gt;&lt;iframe src=*.html&gt;&lt;/iframe&gt;&lt;/noscript&gt;`:这个标签结构可以防止用户通过“另存为”功能...

    制作网页时的23个经典代码.txt

    此段代码用于检测当前页面是否被嵌入在其他框架中,如果发现是,则将顶级窗口的地址设置为当前页面地址,防止他人非法嵌套自己的网页。 ### 10. 替换 noscript 标签 #### 代码: ```html *.html"&gt;&lt;/iframe&gt; ```...

Global site tag (gtag.js) - Google Analytics