防止网页被嵌入框架的方法介绍
来源:自学PHP网
时间:2014-09-19 14:47 作者:
阅读:次
[导读] 防止网页被嵌入框架的方法介绍,方法有很多我们常用的是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.111cn.net,而 window.location.hostname 是 www.111cn.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(){
window.top.location = window.self.location;
document.body.innerHTML = '';
}, 0);
window.self.onload=function(){
document.body.innerHTML = '';
}
}
}
</script>
|
如果确有必要,将他人的网页嵌入自己的框架,那么应该同时满足以下三个条件:
A. 在框架网页的醒目位置,清楚地说明该网页使用了框架技术,并明确列出原网页的URL网址。
B. 在框架网页的醒目位置,向访问者提供"移除框架"的功能。
C. 不得附加任何广告或恶意代码。 |