JavaScript 跨域总结与解决办法
- 格式:docx
- 大小:29.18 KB
- 文档页数:6
JavaScript中的跨域通信和安全策略跨域通信是指在Web开发中,当一个页面的地址与另一个页面的地址不同的时候,这两个页面之间进行数据交换或者通信的过程。
常见的跨域通信场景有网页与服务器之间进行数据传输、不同域名下的页面进行数据交换等。
由于浏览器的同源策略,跨域通信会受到限制,因此需要了解跨域通信的原理和安全策略。
一、跨域通信的原理:1.同源策略(Same Origin Policy):浏览器出于安全考虑,限制不同域名下的页面之间进行通信,以防止恶意的跨站点脚本攻击。
同源策略要求两个页面的协议、域名、端口号必须完全一致,否则视为不同源。
2.跨域资源共享(CORS):可以通过在服务器端设置响应头信息来允许跨域请求,从而实现跨域通信。
在响应头中添加`Access-Control-Allow-Origin`字段来指定允许跨域请求的域名。
3. JSONP(JSON with Padding):JSONP是一种跨域通信的解决方案,通过动态创建`<script>`标签并设置其`src`属性,让服务器返回的数据为JSON格式,并在数据前加上一个函数调用,达到跨域通信的目的。
二、跨域通信的安全策略:1.不信任跨域数据:在跨域通信中,要注意不要信任来自其他域的数据。
可以对数据进行验证、过滤,防止恶意数据注入。
2.隐私保护:跨域通信可能会泄露用户的隐私信息,因此要注意保护用户的隐私安全,不要将敏感信息暴露在跨域通信中。
3.防止跨站脚本攻击(XSS):跨域通信容易受到XSS攻击的影响,可以通过对用户输入进行过滤和转义、设置HttpOnly标志来避免XSS攻击。
4.使用安全的跨域通信方式:要选择适当的跨域通信方式,比如CORS、JSONP等,并且在配置时要注意安全性,避免出现安全漏洞。
5.合理设置响应头:可以通过合理设置响应头信息,比如`Access-Control-Allow-Origin`、`Content-Security-Policy`等字段,来控制跨域请求的行为,从而提高安全性。
JavaScript中的跨域访问与安全问题解决方法JavaScript是一种广泛应用于网页开发的脚本语言,它具有跨平台、动态性和交互性等特点,能够为网页增加丰富的功能和用户体验。
然而,由于浏览器的同源策略限制,JavaScript在跨域访问和安全方面存在一些问题。
本文将探讨JavaScript中的跨域访问问题以及解决方法。
一、什么是跨域访问问题在Web开发中,同源策略是浏览器的一种安全机制,它限制了一个源(域名、协议、端口)下的文档或脚本如何与另一个源进行交互。
当一个脚本试图从一个源访问另一个源的内容时,浏览器会阻止这种跨域访问。
这是为了防止恶意脚本获取用户的敏感信息或进行其他攻击。
二、跨域访问的解决方法1. JSONPJSONP是一种简单且常用的跨域访问解决方案。
它利用了HTML中的<script>标签可以跨域加载脚本的特性。
通过在URL中添加一个回调函数参数,服务器返回的数据将被包裹在该回调函数中,从而实现跨域访问。
2. CORSCORS(Cross-Origin Resource Sharing)是一种更为安全和灵活的跨域访问解决方案。
它通过在服务器端设置响应头部,允许特定的源访问资源。
浏览器在发送跨域请求时会先发送一个预检请求(OPTIONS请求),服务器返回的响应头部中包含了允许跨域访问的信息,浏览器根据这些信息决定是否发送真正的请求。
3. 代理服务器代理服务器是一种将客户端请求转发给目标服务器的中间服务器。
通过在代理服务器上进行跨域请求,然后将响应返回给客户端,可以避免浏览器的同源策略限制。
这种方法需要在服务器端进行配置,适用于无法修改目标服务器响应头部的情况。
4. postMessagepostMessage是HTML5中引入的一种跨文档通信机制。
它允许在不同窗口或框架之间安全地传递消息,包括跨域消息。
通过在不同窗口之间使用postMessage方法传递数据,可以实现跨域通信。
iframe 跨域调用js 方法摘要:1.IFrame 跨域原理简介2.调用JavaScript 方法的方式3.跨域策略解决方案4.示例代码及解析正文:在前端开发中,IFrame 跨域调用JavaScript 方法是一个常见的问题。
本文将详细介绍IFrame 跨域原理、调用JavaScript 方法的方式,以及解决跨域问题的策略。
最后通过示例代码进行解析,帮助大家更好地理解和应用。
一、IFrame 跨域原理简介IFrame 跨域实际上是基于同源策略(Same-Origin Policy)的。
同源策略是浏览器为了保护用户信息安全而设立的一种机制,它限制了来自不同源的资源相互交互。
这里的“源”指的是协议、域名和端口号。
当请求的源与响应的源不同时,浏览器就会返回一个跨域错误。
二、调用JavaScript 方法的方式在IFrame 中调用JavaScript 方法,主要有以下两种方式:1.父窗口主动调用子窗口的JavaScript 方法:```javascript// 父窗口window.addEventListener("load", function() {var iframe = document.getElementById("myIframe");iframe.contentWindow.myFunction();});```2.子窗口主动调用父窗口的JavaScript 方法:```javascript// 子窗口window.addEventListener("load", function() {var iframe = document.getElementById("myIframe");iframe.contentWindow.postMessage({msg: "Hello from iframe!"}, "*");});// 父窗口window.addEventListener("message", function(e) {console.log(e.data);});```三、跨域策略解决方案1.服务端配置CORS(跨域资源共享):浏览器允许跨域请求的前提是服务器需要支持CORS 机制。
JavaScript的跨域请求跨域请求是指浏览器中的JavaScript脚本尝试发送HTTP请求到不同源(origin)的目标地址。
由于浏览器的同源策略(Same Origin Policy)限制,JavaScript在默认情况下只能与同一域名、端口和协议的资源进行通信。
跨域请求的需求主要来源于以下几个方面:数据获取(如使用AJAX请求获取外部API数据)、资源共享(如在不同域名下加载跨域共享的脚本、样式文件)、单点登录(如在多个域名下共享认证信息)等。
为了克服浏览器的同源策略限制,JavaScript提供了多种方式实现跨域请求。
下面将介绍常见的跨域请求方法及其适用场景。
1. JSONP(JSON with Padding)JSONP是一种通过动态创建`<script>`标签实现跨域请求的方法。
它利用了HTML页面不受同源策略限制的特性,通过在请求URL中添加一个callback参数来指定回调函数的名称。
服务器端根据该回调函数名称返回一个特定格式的响应,使得JavaScript脚本能够解析和使用返回的数据。
JSONP适用于仅需要获取数据,不需要进行复杂交互的场景。
2. CORS(Cross-Origin Resource Sharing)CORS是一种在服务器端实现的机制,它通过在HTTP响应头中添加一些特定的字段,告知浏览器该页面允许来自其他域的请求访问。
配置CORS的方式较为灵活,可以根据具体需求决定允许的域、方法(GET、POST等)、请求头信息等。
CORS适用于需要进行复杂请求(如带有请求头、请求体)并且对响应的控制更加细致的场景。
3. 代理服务器代理服务器是一种将客户端发送的请求转发给目标服务器,并将响应返回给客户端的中间服务器。
通过将JavaScript脚本请求发送给同域下的代理服务器,再由代理服务器转发请求到目标地址,就可以绕过浏览器的同源策略限制。
代理服务器可以在服务器端实现,也可以使用第三方服务提供商(如nginx、Apache等)。
解决跨域请求的几种方法跨域请求是指在Web 开发中,由于浏览器的同源策略限制,导致在一个域名下的网页无法直接访问其他域名下的资源。
为了解决跨域请求的问题,开发者们提出了许多方法。
本文将介绍几种常用的解决跨域请求的方法。
1. JSONPJSONP(JSON with Padding)是一种通过动态创建`<script>` 标签来实现跨域请求的方法。
在客户端中,通过将回调函数名作为参数传递给服务器,服务器将返回一个以该函数名为函数名的JavaScript 代码片段。
客户端可以直接执行该代码片段,从而实现跨域请求。
2. CORSCORS(Cross-Origin Resource Sharing)是一种通过在服务器端设置HTTP 头部来实现跨域请求的方法。
在服务器端,设置`Access-Control-Allow-Origin` 头部,指定允许访问的源。
浏览器在发送跨域请求时,会先发送一个OPTIONS 请求,服务器在返回的响应头部中设置允许访问的源,从而实现跨域请求。
3. 代理服务器使用代理服务器是一种常见的解决跨域请求的方法。
在同源策略下,浏览器只允许向同一域名下发送请求。
通过在同一域名下搭建一个代理服务器,将跨域请求转发到目标服务器,再将响应返回给客户端,从而实现跨域请求。
4. WebSocketWebSocket 是一种在单个TCP 连接上进行全双工通信的协议,可以实现跨域请求。
它使用了自定义的协议头,可以在客户端和服务器之间建立长连接,实现实时通信。
由于WebSocket 连接不受同源策略的限制,可以在不同域名下进行跨域请求。
5. postMessagepostMessage 是 HTML5 中的一个特性,可以实现跨文档通信。
它允许在不同窗口或 iframe 之间传输数据,并且不受同源策略的限制。
通过在目标窗口中监听 message 事件,可以实现跨域请求。
以上是几种常用的解决跨域请求的方法。
前端开发中如何处理跨域问题在前端开发中,跨域问题是一个常见且让人头疼的难题。
当我们的网页应用需要从不同的域名获取数据或者与其他域名下的服务进行交互时,浏览器的同源策略就会跳出来“作梗”,阻止这种跨域的访问。
这就好像是一个严格的门卫,只允许自己熟悉的“朋友”进入,而把其他不认识的人拒之门外。
那么,我们该如何巧妙地应对这个问题,让我们的前端应用能够顺利地跨越这个“域名鸿沟”呢?首先,让我们来了解一下什么是跨域。
简单来说,当一个网页的脚本试图访问来自不同源(域名、协议或端口)的资源时,就会发生跨域请求。
比如,你的网页是``,而你试图从``获取数据,这就属于跨域。
常见的跨域场景有很多。
比如,你正在开发一个电商网站,其中商品的详细信息存储在一个独立的服务器上,而你的前端页面需要获取这些信息来展示给用户。
又或者,你的网站需要调用第三方的地图API 来提供地图服务。
这些都是典型的跨域需求。
那么,为什么浏览器要设置这样的同源策略呢?其实,这是为了保障用户的安全和隐私。
想象一下,如果任何网页都能随意访问其他域名的资源,那用户的个人信息、敏感数据岂不是很容易被窃取?所以,同源策略在一定程度上起到了保护作用。
接下来,让我们看看有哪些方法可以处理跨域问题。
JSONP(JSON with Padding)是一种比较古老但仍然有效的方法。
它利用了`<script>`标签的跨域能力。
原理是,服务端返回一个带有函数调用的 JavaScript 脚本,前端通过定义这个函数来接收数据。
但JSONP 也有一些局限性,比如只支持 GET 请求,并且容易受到 XSS 攻击。
CORS(CrossOrigin Resource Sharing,跨域资源共享)则是现代Web 应用中处理跨域的主流方式。
通过在服务端设置响应头,告诉浏览器允许哪些源进行访问以及可以使用哪些请求方法。
比如,服务端可以设置`AccessControlAllowOrigin: `来允许特定域名的访问。
前端开发中的跨域解决方案随着互联网的迅猛发展,前端开发在网站和应用程序的开发中起着至关重要的作用。
然而,由于同源策略的限制,前端开发中经常会遇到跨域问题。
跨域是指在浏览器上运行的脚本(例如JavaScript)试图访问不同源(域、协议或端口)的资源时所遇到的限制。
本文将介绍一些常见的跨域解决方案。
一、JSONPJSONP(JSON with Padding)是一种常见的跨域解决方案。
它利用了HTML中的<script>标签可以跨域加载脚本的特性。
通过在请求URL中添加一个回调函数名,服务器端将返回一个以该函数名为参数的JavaScript代码。
然后,浏览器会自动执行该回调函数,从而实现跨域数据的获取。
JSONP的优点是兼容性好,可以在各种浏览器中运行。
然而,它只支持GET请求,且存在安全风险,因为服务器端需要完全信任回调函数的代码。
二、CORSCORS(Cross-Origin Resource Sharing)是一种更为现代化的跨域解决方案。
它通过在服务器端设置响应头来控制跨域访问。
服务器可以通过设置Access-Control-Allow-Origin来指定允许访问的源,以及通过其他相关头部设置来控制请求的方式和权限。
CORS的优点是安全性较高,可以通过细粒度的配置来控制跨域访问。
它支持各种HTTP请求方法,包括GET、POST等。
然而,CORS需要服务器端的支持,对于一些老旧的服务器可能不太容易实现。
三、代理服务器代理服务器是另一种常见的跨域解决方案。
通过在同源服务器上设置一个代理服务器,前端开发可以通过该代理服务器来间接访问跨域资源。
代理服务器可以在同源服务器上使用后端语言(如PHP、Node.js等)编写,通过转发请求和响应来实现跨域访问。
代理服务器的优点是灵活性高,可以根据实际情况进行定制。
它可以解决各种复杂的跨域问题,但需要额外的服务器资源来支持。
四、WebSocketWebSocket是一种双向通信协议,可以在浏览器和服务器之间建立持久的连接。
js跨域请求数据的3种常⽤的⽅法由于js同源策略的影响,当在某⼀域名下请求其他域名,或者同⼀域名,不同端⼝下的url时,就会变成不被允许的跨域请求。
那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript在原⽣js(没有jQuery和ajax⽀持)的情况下,通常客户端代码是这样的(我假设是在localhost:8080的端⼝下的http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html页⾯的body标签下⾯加⼊以下代码):<script>var xhr = new XMLHttpRequest();xhr.open("get", "http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js", true);xhr.onreadystatechange = function() {if (xhr.readyState == 4 && xhr.status == 200) {console.log(xhr.responseText);}};xhr.send(null);</script>保存,浏览器打开http://localhost:8080/webs/i.mediapower.mobi/wutao/index.html,并且打开console控制台:浏览器很⽆情的给你弹出⼀个同源限制的错误,意思就是你⽆法跨域请求url的数据。
那么,我先采取第⼀种策略,运⽤html中的script标签,插⼊js脚本:(1)通过script标签引⽤,写死你需要的src的url地址,⽐如:<script>var callbackfunction = function(data) {console.log('我是跨域请求来的数据-->' + );};</script><script src="http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction"></script>这⾥我定义⼀个callbackfunction的函数,然后⽤script标签的src属性跨域请求数据,那么,test.js的内容经过约定,需要写成这样:callbackfunction({"name":"wwwwwwwwwwww"});保存,打开index.html并刷新:(2)你也可以动态的加⼊script标签,让html解析的时候,动态的加载script脚本,并请求远端数据:<script>var callbackfunction = function(data) {console.log('我是跨域请求来的数据-->' + );};var script = document.createElement('script'),body = document.getElementsByTagName('body');script.src = 'http://i2.mediapower.mobi/adpower/vm/Bora/js/test.js?callback=callbackfunction';body[0].appendChild(script);</script>结果和上⾯⼀样。
JS跨域解决⽅案之使⽤CORS实现跨域引⾔跨域是我在⽇常⾯试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略,即JavaScript或Cookie 只能访问同域下的内容),因为我们在⽇常的项⽬开发时会不可避免的需要进⾏跨域操作,所以跨域能⼒也算是前端⼯程师的基本功之⼀。
和⼤多数跨域的解决⽅案⼀样,JSONP也是我的选择,可是某天PM的需求变了,某功能需要改成⽀持POST,因为传输的数据量⽐较⼤,GET形式搞不定。
所以折腾了下闻名已久的CORS(跨域资源共享,Cross-Origin Resource Sharing),这边⽂章也就是折腾期间的⼩记与总结。
•CORS能做什么:正常使⽤AJAX会需要正常考虑跨域问题,所以伟⼤的程序员们⼜折腾出了⼀系列跨域问题的解决⽅案,如JSONP、flash、ifame、xhr2等等。
• CORS的原理:CORS定义⼀种跨域访问的机制,可以让AJAX实现跨域访问。
CORS 允许⼀个域上的⽹络应⽤向另⼀个域提交跨域 AJAX 请求。
实现此功能⾮常简单,只需由服务器发送⼀个响应标头即可。
下⾯我们步⼊正题具体详情如下所⽰:跨站HTTP请求(Cross-site HTTP request)是指发起请求的资源所在域不同于请求指向的资源所在域的HTTP请求。
⽐如说,我在Web⽹站A()中通过<img>标签引⼊了B站的资源(/images/1.jpg),那么A站会向B站发起⼀个跨站请求。
这种图⽚资源的跨站请求是被允许的,类似的跨站请求还有CSS⽂件,JavaScript⽂件等。
但是如果是在脚本中发起HTTP请求,出于安全考虑,会被浏览器限制。
⽐如,使⽤ XMLHttpRequest 对象发起 HTTP 请求就必须遵守同源策略。
所谓“同源策略”是指Web应⽤程序只能使⽤ XMLHttpRequest 对象向发起源所在域内发起HTTP请求,这个请求源和请求对象必须在⼀个域内。
Web/H5站点Js跨域问题解决方案一、目的介绍公司的Web/H5站点,前台采用静态html+js的方式来处理,后台用Java Or .net,这样在使用的过程中,很有可能就会遇到JS跨域问题,这个问题目前网络上大多采用有采用Jsonp的方式,也是da多的采用这种方式,但是,有时候,一些数据量比较大,不想将其数据暴露在请求字符串QueryString中。
这样一来,Jsonp这种方式就不合适了,就需要采取其他的方式来处理。
二、问题分析我们来分析下,主要的问题是JS跨域,直白一点的话,就是说JS请求的路径跟JS所在的路径,不在一个域名下面。
那么我们只要解决这个问题就可以了,我们可以做下域名映射就可以了!Nginx可以完美的解决域名映射的问题。
这样我们就能够把JS跨域的问题完美的解决掉了!三、站点部署可以按照原有的方式来部署,我原来是按照Tomcat的方式来进行部署,网上有很多关于这方面的说明与教程,在此就不在过多描述!四、N ginx安装部署Nginx的下载,网上有一大堆的下载链接,我就不在多说,我下载的版本是Nginx 1.6.3的,可能版本比较老了,但是够用就行!其他不多少。
Nginx用户很多都是在linux下做的部署,我的开发环境是win7,所以我只能是想办法将其安装在win7下,至于看官要将其安装到linux或其他系统下,请自行在百度上搜索相关资料做安装。
4.1.安装nginx在nginx安装的时候,我采用的winsw的方式,将其安装到window系统里面,做成一份service的方式,让其开机自动运行。
至于Winsw的相关资料:https:///u011054333/article/details/69992995 可通过上述链接查看。
我将nginx放在D:\java下,所以,执行的时候,如下图所示运行cmd命令,如下图:安装启动后,如下图所示。
4.2. Nginx.conf配置将nginx.conf文件中原有的server节点注释掉,新建多个conf 文件,文件中为server节点内容,server节点为不同的域名。
JavaScript 跨域总结与解决办法什么是跨域JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。
但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。
这里把涉及到跨域的一些问题简单地整理一下:首先什么是跨域,简单地理解就是因为JavaScript同源策略的限制, 域名下的js无法操作或是域名下的对象。
更详细的说明可以看下表:URL 说明是否允许通信/a.js同一域名下允许/b.js/lab/a.js同一域名下不同文件夹允许/script/b.js:8000/a.js同一域名,不同端口不允许/b.js/a.js同一域名,不同协议不允许https:///b.js/a.js域名和域名对应ip 不允许http://70.32.92.74/b.js/a.js 主域相同,子域不同不允许特别注意两点:第一,如果是协议和端口造成的跨域问题“前台”是无能为力的,第二:在跨域问题上,域仅仅是通过“URL的首部”来识别而不会去尝试判断相同的ip 地址对应着两个域或两个域是否在同一个ip上。
“URL的首部”指window.location.protocol +window.location.host,也可以理解为“Domains, protocols and ports must match”。
接下来简单地总结一下在“前台”一般处理跨域的办法,后台proxy这种方案牵涉到后台配置,这里就不阐述了,有兴趣的可以看看yahoo的这篇文章:《JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls》1、document.domain+iframe的设置对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。
具体的做法是可以在/a.html和/b.html 两个文件中分别加上document.domain = …‟;然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了。
当然这种办法只能解决主域相同而二级域名不同的情况,如果你异想天开的把的domian设为 那显然是会报错地!代码如下:上的a.html1 2 3 4 5 document.domain = '';varifr = document.createElement('iframe'); ifr.src = '/b.html';ifr.style.display = 'none';document.body.appendChild(ifr);6 7 8 9 10ifr.onload = function(){var doc = ifr.contentDocument || ifr.contentWindow.document;// 在这里操纵b.htmlalert(doc.getElementsByTagName("h1")[0].childNodes[0].nodeValue); };上的b.html1document.domain = '';这种方式适用于{, , ,}中的任何页面相互通信。
备注:某一页面的domain默认等于window.location.hostname。
主域名是不带www的域名,例如,主域名前面带前缀的通常都为二级域名或多级域名,例如其实是二级域名。
domain只能设置为主域名,不可以在中将domain设置为。
问题:1、安全性,当一个站点()被攻击后,另一个站点()会引起安全漏洞。
2、如果一个页面中引入多个iframe,要想能够操作所有iframe,必须都得设置相同domain。
2、动态创建script虽然浏览器默认禁止了跨域访问,但并不禁止在页面中引用其他域的JS文件,并可以自由执行引入的JS文件中的function(包括操作cookie、Dom等等)。
根据这一点,可以方便地通过创建script节点的方法来实现完全跨域的通信。
具体的做法可以参考YUI 的Get Utility这里判断script节点加载完毕还是蛮有意思的:ie只能通过script的readystatechange属性,其它浏览器是script的load事件。
以下是部分判断script加载完毕的方法。
1 2 3 4 5 6js.onload = js.onreadystatechange = function() {if (!this.readyState || this.readyState === 'loaded' || this.readyState === ' // callback在此处执行js.onload = js.onreadystatechange = null;}};3、利用iframe和location.hash这个办法比较绕,但是可以解决完全跨域情况下的脚步置换问题。
原理是利用location.hash来进行传值。
在url:#helloword中的…#helloworld‟就是location.hash,改变hash并不会导致页面刷新,所以可以利用hash值来进行数据传递,当然数据容量是有限的。
假设域名下的文件cs1.html要和域名下的cs2.html传递信息,cs1.html首先创建自动创建一个隐藏的iframe,iframe的src 指向域名下的cs2.html页面,这时的hash值可以做参数传递用。
cs2.html 响应请求后再将通过修改cs1.html的hash值来传递数据(由于两个页面不在同一个域下IE、Chrome不允许修改parent.location.hash的值,所以要借助于域名下的一个代理iframe;Firefox可以修改)。
同时在cs1.html上加一个定时器,隔一段时间来判断location.hash的值有没有变化,一点有变化则获取获取hash值。
代码如下:先是下的文件cs1.html文件:1 2 3 4 5 6 7 8 9101112131415 16function startRequest(){varifr = document.createElement('iframe');ifr.style.display = 'none';ifr.src = '/lab/cscript/cs2.html#paramdo';document.body.appendChild(ifr);}function checkHash() {try {var data = location.hash ? location.hash.substring(1) : ''; if (console.log) {console.log('Now the data is '+data);}} catch(e) {};}setInterval(checkHash, 2000);域名下的cs2.html:1 2 3 4 5 6 7 8 9 10 //模拟一个简单的参数处理操作switch(location.hash){case '#paramdo':callBack();break;case '#paramset'://do something…… break;}1112131415161718192021 22function callBack(){try {parent.location.hash = 'somedata';} catch (e) {// ie、chrome的安全机制无法修改parent.location.hash,// 所以要利用一个中间的cnblogs域下的代理iframevarifrproxy = document.createElement('iframe');ifrproxy.style.display = 'none';ifrproxy.src = '/test/cscript/cs3.html#somedata'; // 注意该文件在" document.body.appendChild(ifrproxy);}}下的域名cs3.html1 2//因为parent.parent和自身属于同一个域,所以可以改变其location.hash的值parent.parent.location.hash = self.location.hash.substring(1);当然这样做也存在很多缺点,诸如数据直接暴露在了url中,数据容量和类型都有限等……4、实现的跨域数据传输文章较长列在此处不便于阅读,详细请看实现的跨域数据传输。
5、使用HTML5 postMessageHTML5中最酷的新功能之一就是跨文档消息传输Cross Document Messaging。
下一代浏览器都将支持这个功能:Chrome 2.0+、Internet Explorer 8.0+, Firefox 3.0+, Opera 9.6+, 和Safari 4.0+ 。
Facebook已经使用了这个功能,用postMessage支持基于web的实时消息传递。
otherWindow.postMessage(message, targetOrigin);otherWindow: 对接收信息页面的window的引用。
可以是页面中iframe的contentWindow属性;window.open的返回值;通过name或下标从window.frames 取到的值。
message: 所要发送的数据,string类型。
targetOrigin: 用于限制otherWindow,“*”表示不作限制/index.html中的代码:1 2 3 <iframeid="ifr"src="/index.html"></iframe> <scripttype="text/javascript">window.onload = function() {4 5 6 7 8 9 varifr = document.getElementById('ifr');vartargetOrigin = ''; // 若写成'/c/proxy.html'效果一样// 若写成''就不会执行postMessag ifr.contentWindow.postMessage('I was there!', targetOrigin);};</script>/index.html中的代码:1 2 3 4 5 6 7 8 9 10<scripttype="text/javascript">window.addEventListener('message', function(event){// 通过origin属性判断消息来源地址if (event.origin == '') {alert(event.data); // 弹出"I was there!"alert(event.source); // 对、index.html中window对象的引用// 但由于同源策略,这里event.source不可以访问象}}, false);</script>。