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


Posted in Javascript onSeptember 13, 2016

本文实例讲述了JS防止网页被嵌入iframe框架的方法。分享给大家供大家参考,具体如下:

例如:

<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;
}

好了,升级版代码完成。除了本地域名以外,其他域名一律无法将你的网页嵌入框架。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
javascript实现图片切换的幻灯片效果源代码
Dec 12 Javascript
Extjs4 GridPanel 的几种样式使用介绍
Apr 18 Javascript
JQuery控制radio选中和不选中方法总结
Apr 15 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
详解js的事件处理函数和动态创建html标记方法
Dec 16 Javascript
js获取指定时间的前几秒
Apr 05 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
Vue中的无限加载vue-infinite-loading的方法
Apr 08 Javascript
如何在wxml中直接写js代码(wxs)
Nov 14 Javascript
Javascript实现鼠标点击冒泡特效
Dec 24 Javascript
vue路由结构可设一层方便动态添加路由操作
Aug 31 Javascript
javascript数组遍历的方法实例分析
Sep 13 #Javascript
jQuery弹出遮罩层效果完整示例
Sep 13 #Javascript
JS简单去除数组中重复项的方法
Sep 13 #Javascript
jQuery包裹节点用法完整示例
Sep 13 #Javascript
jQuery查找节点方法完整实例
Sep 13 #Javascript
jQuery表单对象属性过滤选择器实例详解
Sep 13 #Javascript
jQuery实现的放大镜效果示例
Sep 13 #Javascript
You might like
PHP实现算式验证码和汉字验证码实例
2015/03/09 PHP
php时间函数用法分析
2016/05/28 PHP
PHP如何防止XSS攻击与XSS攻击原理的讲解
2019/03/22 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
JQuery 学习笔记 选择器之二
2009/07/23 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
jquery对表单操作2
2011/04/06 Javascript
分页栏的web标准实现
2011/11/01 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
2011/12/06 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
使用text方法获取Html元素文本信息示例
2014/09/01 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
微信小程序实现列表下拉刷新上拉加载
2020/07/29 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
Python实现在线程里运行scrapy的方法
2015/04/07 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
python实现诗歌游戏(类继承)
2019/02/26 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
python如何统计代码运行的时长
2019/07/24 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
CSS3效果:自定义“W”形运行轨迹实例
2017/03/29 HTML / CSS
毕业生多媒体设计求职信
2013/10/12 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
机关单位动员会主持词
2014/03/20 职场文书
幼儿园中班教师寄语
2014/04/03 职场文书
影子教师研修方案
2014/06/14 职场文书
2014年政教处工作总结
2014/12/20 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript