A-A+

防止网页被嵌入框架的方法介绍

2016年02月19日 web前端设计 暂无评论 阅读 5 views 次

防止网页被嵌入框架的方法介绍,方法有很多我们常用的是js防止,当然也可以实现像php程序判断来源这类的操作。

我写了一段很简单的javascript代码,大家只要将它放入网页源码的头部,那些流氓就没有办法使用你的网页了,代码如下:

  1. <script type="text/javascript">  
  2. if (window!=top) // 判断当前的window对象是否是top对象  
  3. top.location.href =window.location.href; // 如果不是,将top对象的网址自动导向被嵌入网页的网址  
  4. </script>  

这段代码是有效的,但是,有一个问题,使用后,任何人都无法再把你的网页嵌入框架了,包括你自己在内.

问题很简单,只要做一个判断,当前框架和顶层框架的域名是否相同,如果答案是否,就做了一个URL重定向,代码如下:

  1. if (top.location.hostname != window.location.hostname) {  
  2.   top.location.href = window.location.href;  
  3. }  

但是还是不能运行,假定 top.location.hostname 是 www.xiariboke.com,而 window.location.hostname 是 www.xiariboke.com。也就是说,111.com把222.com嵌入了它的网页中。这时,比较 top.location.hostname != window.location.hostname 会有.

事实上,这提示我们,只要查看top.location.hostname是否报错就可以了,如果报错了,表明存在跨域,就对top对象进行URL重导向,如果不报错,表明不存在跨域,或者未使用框架,就不采取操作,代码如下:

  1. try{  
  2.   top.location.hostname;  
  3. }  
  4. catch(e){  
  5.   top.location.href = window.location.href;  
  6. }  

这样写已经正确了,在IE和Firefox中可以正确运行,但是,Chrome浏览器会出现错误,不知为何,在跨域情况下,Chrome对top.location.hostname不报错!

没办法,只能为了Chrome,再加一段补充代码,代码如下:

  1. try{  
  2.   top.location.hostname;  
  3.   if (top.location.hostname != window.location.hostname) {  
  4.     top.location.href =window.location.href;  
  5.   }  
  6. }  
  7. catch(e){  
  8.   top.location.href = window.location.href;  
  9. }  

再分享一个实例,代码如下:

  1. <script type="text/javascript">  
  2. if(window.top && window.top !== window.self ){  
  3. try{  
  4. top.frames["clientFrame"].document.domain;  
  5. }  
  6. catch(e){  
  7. setTimeout(function(){  
  8. windowwindow.top.location = window.self.location;  
  9. document.body.innerHTML = '';  
  10. }, 0);  
  11. window.self.onload=function(){  
  12. document.body.innerHTML = '';  
  13. }  
  14. }  
  15. }  
  16. </script>  

如果确有必要,将他人的网页嵌入自己的框架,那么应该同时满足以下三个条件.

A.在框架网页的醒目位置,清楚地说明该网页使用了框架技术,并明确列出原网页的URL网址.

B.在框架网页的醒目位置,向访问者提供"移除框架"的功能.

C.不得附加任何广告或恶意代码.

标签:

给我留言