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

我写了一段很简单的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. 不得附加任何广告或恶意代码。

2022-01-15 16:36:55 通过 网页 浏览(629)

共有0条评论!

发表评论

更换一道题!