防止网页被嵌入框架的方法介绍
防止网页被嵌入框架的方法介绍,方法有很多我们常用的是js防止,当然也可以实现像php程序判断来源这类的操作。
我写了一段很简单的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.xiariboke.net,而 window.location.hostname 是 www.xiariboke.net。也就是说,111.com把222.com嵌入了它的网页中。这时,比较 top.location.hostname != window.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;
- }
再分享一个实例,代码如下:
- <script type="text/javascript">
- if(window.top && window.top !== window.self ){
- try{
- top.frames["clientFrame"].document.domain;
- }
- catch(e){
- setTimeout(function(){
- windowwindow.top.location = window.self.location;
- document.body.innerHTML = '';
- }, 0);
- window.self.onload=function(){
- document.body.innerHTML = '';
- }
- }
- }
- </script>
如果确有必要,将他人的网页嵌入自己的框架,那么应该同时满足以下三个条件.
A.在框架网页的醒目位置,清楚地说明该网页使用了框架技术,并明确列出原网页的URL网址.
B.在框架网页的醒目位置,向访问者提供"移除框架"的功能.
C.不得附加任何广告或恶意代码.