js设置document.domain实现跨域的注意点分析


Posted in Javascript onMay 21, 2015

本文实例分析了js设置document.domain实现跨域的注意点。分享给大家供大家参考。具体分析如下:

document.domain
用来得到当前网页的域名。
比如在地址栏里输入:

javascript:alert(document.domain); //3water.com

我们也可以给document.domain属性赋值,不过是有限制的,你只能赋成当前的域名或者基础域名。
比如:

javascript:alert(document.domain = "3water.com"); //3water.com

javascript:alert(document.domain = "3water.com"); //3water.com

上面的赋值都是成功的,因为3water.com是当前的域名,而3water.com是基础域名。

但是下面的赋值就会出来"参数无效"的错误:

javascript:alert(document.domain = "cctv.net"); //参数无效

javascript:alert(document.domain = "3water.com"); //参数无效

因为cctv.net与3water.com不是当前的域名也不是当前域名的基础域名,所以会有错误出现。
这是为了防止有人恶意修改document.domain来实现跨域偷取数据。

利用document.domain 实现跨域:

前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域

Javascript出于对安全性的考虑,而禁止两个或者多个不同域的页面进行互相操作。
相同域的页面在相互操作的时候不会有任何问题。

比如在:aaa.com的一个网页(a.html)里面 利用iframe引入了一个bbb.com里的一个网页(b.html)。
这时在a.html里面可以看到b.html里的内容,但是却不能利用javascript来操作它。因为这两个页面属于不同的域,在操作之前,js会检测两个页面的域是否相等,如果相等,就允许其操作,如果不相等,就会拒绝操作。
这里不可能把a.html与b.html利用JS改成同一个域的。因为它们的基础域名不相等。(强制用JS将它们改成相等的域的话会报跟上面一样的"参数无效错误。")

所以如果在a.html里引入aaa.com里的另一个网页,是不会有这个问题的,因为域相等。

有另一种情况,两个子域名:

aaa.xxx.com
bbb.xxx.com

aaa里的一个网页(a.html)引入了bbb 里的一个网页(b.html),
这时a.html里同样是不能操作b.html里面的内容的。
因为document.domain不一样,一个是aaa.xxx.com,另一个是bbb.xxx.com。

这时我们就可以通过Javascript,将两个页面的domain改成一样的,
需要在a.html里与b.html里都加入:

document.domain = "xxx.com";

这样这两个页面就可以互相操作了。也就是实现了同一基础域名之间的"跨域"。

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

Javascript 相关文章推荐
JavaScript中出现乱码的处理心得
Dec 24 Javascript
jQuery当鼠标悬停时放大图片的效果实例
Jul 03 Javascript
自编jQuery插件实现模拟alert和confirm
Sep 01 Javascript
JavaScript实现同步于本地时间的动态时间显示方法
Feb 02 Javascript
JavaScript的RequireJS库入门指南
Jul 01 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
Mar 01 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 Javascript
一文了解vue-router之hash模式和history模式
May 31 Javascript
ES6 Promise对象的应用实例分析
Jun 27 Javascript
Layui tree 下拉菜单树的实例代码
Sep 21 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
Nov 12 Javascript
jQuery+ajax实现无刷新级联菜单示例
May 21 #Javascript
jQuery插件expander实现图片翻转特效
May 21 #Javascript
简单分析javascript面向对象与原型
May 21 #Javascript
jQuery获取上传文件的名称的正则表达式
May 21 #Javascript
js兼容火狐获取图片宽和高的方法
May 21 #Javascript
js兼容火狐显示上传图片预览效果的方法
May 21 #Javascript
javascript去除空格方法小结
May 21 #Javascript
You might like
PHP生成静态页面详解
2006/12/05 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
详解PHP序列化和反序列化原理
2018/01/15 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
微信公众平台开发教程(六)获取个性二维码的实例
2016/12/02 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
微信小程序 设置启动页面的两种方法
2017/03/09 Javascript
Vue实现百度下拉提示搜索功能
2017/06/21 Javascript
微信小程序版翻牌小游戏
2018/01/26 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
vue学习笔记之Vue中css动画原理简单示例
2020/02/29 Javascript
[05:10]2014DOTA2国际邀请赛 通往胜利之匙赛场探秘之旅
2014/07/18 DOTA
在Python中使用SQLite的简单教程
2015/04/29 Python
python实现爬虫下载美女图片
2015/07/14 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
终端命令查看TensorFlow版本号及路径的方法
2018/06/13 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
Python面向对象之类的封装操作示例
2019/06/08 Python
Django外键(ForeignKey)操作以及related_name的作用详解
2019/07/29 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python应用实现双指数函数及拟合代码实例
2020/06/19 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
AP澳洲中文网:澳洲正品直邮,包税收件无忧
2019/07/12 全球购物
计算机专业毕业生的自我评价
2013/11/18 职场文书
仓库保管员岗位职责
2013/12/20 职场文书
2016年五一国际劳动节活动总结
2016/04/06 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
MySQL root密码的重置方法
2021/04/21 MySQL