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 相关文章推荐
JQuery跨Iframe选择实现代码
Aug 19 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
Jul 26 Javascript
JS随即打乱数组实现代码
Dec 03 Javascript
Node.js实现在目录中查找某个字符串及所在文件
Sep 03 Javascript
基于jquery实现表格无刷新分页
Jan 07 Javascript
jQuery返回定位插件详解
May 15 jQuery
jQuery实现鼠标响应式淘宝动画效果示例
Feb 13 jQuery
解决淘宝cnpm 安装后cnpm不是内部或外部命令的问题
May 17 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
Jul 12 Javascript
vue中slot(插槽)的介绍与使用
Nov 12 Javascript
javascript实现倒计时效果
Feb 17 Javascript
Javascript新手入门之字符串拼接与变量的应用
Dec 03 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
php4的session功能评述(一)
2006/10/09 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
jQuery的css() 方法使用指南
2015/05/03 Javascript
jquery属性,遍历,HTML操作方法详解
2016/09/17 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
vue移动端弹框组件的实例
2018/09/25 Javascript
JavaScript实现与使用发布/订阅模式详解
2019/01/19 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
python实现自动登录
2018/09/17 Python
Python数据集切分实例
2018/12/08 Python
selenium+python自动化测试环境搭建步骤
2019/06/03 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
什么是反射
2012/03/17 面试题
园林资料员岗位职责
2013/12/30 职场文书
数控技术专业毕业自荐书范文
2014/02/05 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
师德师风演讲稿
2014/05/05 职场文书
治安消防安全责任书
2014/07/23 职场文书
党员干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
法学专业求职信范文
2015/03/19 职场文书
2015秋季幼儿园开学通知
2015/07/16 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
Apache Hudi数据布局黑科技降低一半查询时间
2022/03/31 Servers
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技