javascript跨域訪问探索之旅
需求:
近期工作负责一个互联网应用A(我公司应用)与还有一个互联网应用B进行通讯。通讯的方式是这种:还有一个互联网应用某些表单信息须要从我公司的互联网应用获取。首先用户訪问互联网应用B。接着在表单编辑页面点击button创建新窗体显示互联网应用A内容。用户在应用A窗体选取好内容后点击button,应用A的窗体关闭。应用A选取好的内容填充到应用B特定的表单元素上。
这个问题最简化描写叙述就是,浏览器有两个不同站点(域)的页面,页面B须要获取页面A的信息。
问题解决过程:
刚開始我也不知道这个是跨域问题,尽管同事一開始就告诉我说这是javascript跨域问题,可是要自己解决这个问题,那么至少须要了解背景知识,所以我忽略同事提供的线索。无论是不是跨域的问题,这个问题告诉我的是浏览器的两个展示不同站点的窗体要进行通信,那么首先要确定的是能否两个站点的窗体能否够通信,鉴于眼下掌握的资料有限。我做了一个大胆的决定——基于自己浅薄的知识储备进行如果,如果两个站点的窗体的javascript(或其它client脚本技术)能够进行通信,那么试想已经打开且成功登陆的支付宝等应用页面后,用户不小心訪问了还有一个危急站点。这个危急站点的javascript找到支付宝网页就获取到敏感信息,那么这样浏览器每次仅仅打开一个才是安全的,由于谁也不知道打开的下一个网页是否有javascript获取自己的敏感信息,而打开的新站点页面也操心浏览器存在的其它站点是否有Javascript获取自己的敏感信息,这种互联网环境人人自危。如果浏览器的两个站点页面不能通信,那么我这个任务就不能完毕了。
正正是进行了如果。我怀着忐忑不安的心情開始了浏览器内不同站点窗体通信的探索之旅。
既然是浏览器是载体。那么我首先从浏览器入手,浏览器最初是为了解析超文本语言而产生的。而超文本就是html,所以我就了解html技术。了解html技术我常上的站点是www.w3school.com。了解html技术,同一时候今天的html与Javascript技术是密不可分的。我也同一时候了解javascript技术。了解html与javascript过程中。主要了解内置对象和html
dom,由于这两个站点终于到浏览器的是html字符流,而浏览器将html字符流构建html dom树,浏览器的一个窗体的载体就是window对象,我查看了介绍发现opener属性十分显眼,由于opener这个属性能够引用到新创建的窗体对象window,而window对象拥有全局变量、javascript定义。那么不就整整符合自己的需求吗?同一时候也表示一点点操心,是不是说。我从一个站点打开了支付宝而且登录。那么打开支付宝站点的页面就能够获取支付宝站点页面的信息了?如果真的是这样。互联网世界的危急无处不出,可是測试后发现,opener获取到的window对象是有限制的,不能获取document对象等。于是逐个查看浏览器对象,直到document对象的domain属性,这个属性能够返回当前文档的域名。在一个不起眼的提示与凝视找到了人生的希望——提示:domain
属性能够解决因同源安全策略带来的不同文档的属性共享问题。点击这里。了解同源安全策略的具体信息。
总结链接网页的内容是JavaScript 的同源策略。查看了整个文档。我的注意力停留在跨域脚本API訪问那一部分。window.postMessage是一个应用于安全地使用跨源通信的方法。跨源通信的模型是这种。源A窗体对象获取源B窗体对象。使用源B窗体对象调用postMessage方法将数据传送到源B,源B窗体对象须要加入
addEventListener进行事件监听,其实两个源还是隔离的,同一时候发送的消息由监听者决定怎样处理。
至此。我的问题已经攻克了。
总结:
1)做事方式上:遇到问题不能直接就百度、google、bing等,尤其是国内的搜索引擎,垃圾结果一大堆,首先是圈定问题域所在。然后再去查找相关技术知识,提高效率,这些技术知识是对解决方法进行推断的前提。不然你找来的解决的方法可能隐藏着巨bug,同一时候随便百度都能找到的解决的方法的说明仅仅要找一个会百度的人都能够取代你。那么自己的价值体如今什么地方呢?
2)基础是技术突破关键点,基础扎实能够推理出基于上层实现的技术,举一反三。
javascript跨域訪问探索之旅的更多相关文章
- jsonp突破同源策略,实现跨域訪问请求
版权声明:本文为博主原创文章,未经博主同意不得转载.如需转载请声明:[转自 http://blog.csdn.net/xiaoxian8023 ] https://blog.csdn.net/xiao ...
- jquery ajax CORS 跨域訪问 WebService
JS代码: var word = document.getElementById("word").value; $.ajax({ type: "POST", c ...
- 让Apache 和nginx支持跨域訪问
1,怎样让Apache支持跨域訪问呢? 步骤: 改动httpd.conf,windows中相应的文件夹是:C:\wamp\bin\apache\Apache2.4.4\conf\httpd.conf ...
- jquery ajax 跨域訪问样例
<script type="text/javascript"> $(function(){ $.ajax({ cache : false, type ...
- html5的postmessage实现js前端跨域訪问及调用解决方式
关于跨域訪问.使用JSONP的方法.我前面已经demo过了.详细见http://supercharles888.blog.51cto.com/609344/856886,HTML5提供了一个很强大的A ...
- Android跨进程訪问(AIDL服务)
我将AndroidAIDL的学习知识总结一下和大家共享 在Android开发中,AIDL主要是用来跨进程訪问. Android系统中的进程之间不能共享内存,因此,须要提供一些机制在不同进程之间进行数据 ...
- JavaScript 跨域漫游
前言: 最近在公司做了几个项目都涉及到了iframe,也就是在这些iframe多次嵌套的项目中,我发现之前对iframe的认识还是比较不足的,所以就静下心来,好好整理总结了iframe的相关知识:&l ...
- 利用javascript跨域访问cookie之广告推广
在上一篇<说一说javascript跨域和jsonp>中,利用JSONP进行了跨域的数据访问,利用JS本身的跨域能力在远端生成HTML结构的方式完成了一个小广告. 在实际应用中, 跨域使用 ...
- Javascript跨域问题总结
疯狂的JSONP 关于JSON与JSONP简单总结 window.name实现的跨域数据传输 JavaScript跨域总结与解决办法 flash跨域策略文件crossdomain.xml配置详解
随机推荐
- OpenVPN记住账号密码自动连接
说明:在增加了证书+账号密码之后,安全性确实提高了,但是面临的问题也有,每次重启时必须输入账号密码才能连接,这也造成了无人值守的问题. 解决: 1.在Client的client.ovpn末尾添加一行a ...
- jquer总结
前端jq总结 选择器********************************************************************** 1,基本选择 器 #id .clss ...
- express结合jade模板渲染HTML
在线html转jade工具>> 注意:以下是在Windwo环境下 运行: npm install jade 然后你的目录node_modules下将增加jade文件夹 app.js var ...
- img转base64的两种方式的比较
关于图片转base64然后提交后台,项目中一直用的是canvas的toDataUrl方法,但是之前看HTML5 API文档的时候,一直记得好像有个叫fileReader的东西也可以做到.于是过年无事的 ...
- OpenShift应用镜像构建(3) - Jenkins的流水线构建
Jenkins方式构建的定位是使用专门的CICD平台. 既支持把JenKins作为一个Pod部署到openshift内部,也支持部署在Openshift集群外部,操作上的区别是 openshift自己 ...
- 容器set和multiset
一.set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. 需要包含头文件: #include <set> ...
- CDN混战何去何从,史上最全分析
近日,CDN市场风起云涌,十几年平稳的市场格局瞬时战火纷飞.一路从传统CDN即蓝汛.网宿为主的 "双雄争霸".演变为多家云CDN厂商阿里云.腾讯云.百度云等的降价大战.更有 ...
- 谈谈Ext JS的组件——布局的用法续一
盒子布局 盒子布局主要作用是以水平(Ext.layout.container.HBox)或垂直方式(Ext.layout.container.VBox)来划分容器区域.这也是比較常有的布局方式. 使用 ...
- [转]sa不能远程连接sql server 2008的解决办法
本文转自:http://www.cnblogs.com/chendaoyin/archive/2012/08/25/2656900.html 方法: 开始->Microsoft SQL Serv ...
- JavaScript Dictionary
Excellent. The 4guysfromrolla example is very helpful, thanks. I've pasted a complete javascript.j ...