最近在做项目的时候遇到了JavaScript跨域的问题,JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象。但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦。网上也有很多解决方案,没有找到适合的解决方法。最后使用了easyXDM解决了我的问题,使用easyXDM时有两个条件:1.浏览器要安装flash插件(具体支持的浏览器在说明文件里说的很清楚)2.要跨域的工程中都要引入easyXDM文件。希望能给需要的同学提供一个解决的方法。
先说一下我的问题,项目涉及到两个工程,部署在不同的服务器上,http://127.0.0.1/a.jsp里嵌入一个iframe,iframe引入了一个http://127.0.xx.xx/b.jsp页面,b.jsp里嵌了一个flex页面,我在b.jsp中有一个表单提交的saveInfo()的js函数,我想在a.jsp里保存时调用saveInfo()。
具体的使用方法在example里都有很好的例子,照着做就可以。要注意引入easyXDM.js和json2.js的引入。
下面是easyXDM的简要说明
http://stackoverflow.com/questions/10928245/cant-access-js-function-in-cross-domain-environment
[This is one of the best and easy to use APIs] available for Cross Domain Communication between web applications. easyXDM is easy to use, light weight, flexible, writing good quality code etc. I strongly think if you are going to continue with cross domain scenario, then you should adapt a robust cross domain apis such as easyXDM.
[easyXDM vs PostMessage Transport?] easyXDM will use the PostMessageTransport method if this feature is enabled by the browser such as (IE8+, Opera 9+, Firefox 3+, Safari 4+,Chrome 2+) on the other side it will use different transport methods for the un supported browsers such as (Firefox 1-2 - using the FrameElementTransport) other transport methods will be used as needed such as FlashTransport, NameTransport, and HashTransport).
This clearly makes easyXDM superior in terms on browser support specially the old browsers.
To demonstrate cross-domain access using easyXDM (Domain1 [abc.com] calls a method on a remote domain [xyz.com]):
<script type="text/javascript"> /** * Request the use of the JSON object */ easyXDM.DomHelper.requiresJSON("../json2.js"); </script> <script type="text/javascript"> var remote; window.onload = function(){ /** * When the window is finished loading start setting up the interface */ remote = new easyXDM.Interface(/** The channel configuration */{ /** * Register the url to hash.html, this must be an absolute path * or a path relative to the root. * @field */ local: "/hash.html", /** * Register the url to the remote interface * @field */ remote: "http://YOUR.OTHER.DOMAIN/YOUR_APPLICATION/YourRemoteApplication.html", /** * Register the DOMElement that the generated IFrame should be inserted into */ container: document.getElementById("embedded") }, /** The interface configuration */ { remote: { remoteApplicationMethod: {}, noOp: { isVoid: true } }, local: { alertMessage: { method: function(msg){ alert(msg); }, isVoid: true } } },/**The onReady handler*/ function(){ /** * Call a method on the other side */ remote.noOp(); }); } function callRemoteApplicationMethod(Value1, Value2){ remote.remoteApplicationMethod(Value1, Value2, function(result){ alert("Results from remote application" + result); }); } </script>
In the body
<input type="button" onclick="callRemoteApplicationMethod(3,5)" value="call remoteApplicationMethod on remote domain"/>
Now on your remote domain side you need to define your remote client as follows
*On Domain [ xyz.com ] - Remote domain*
This should go into the page YOUR_APPLICATION/YourRemoteApplication.html
/** * Request the use of the JSON object */ easyXDM.DomHelper.requiresJSON("../json2.js"); </script> <script type="text/javascript"> var channel, remote; /** * When the window is finished loading start setting up the channel */ window.onload = function(){ /** * When the channel is ready we create the interface */ remote = new easyXDM.Interface(/** The channel configuration*/{}, /** The configuration */ { remote: { alertMessage: { isVoid: true } }, local: { remoteApplicationMethod: { method: doSomething(value1, value2){ // do somethigs with values return "i'm return value from remote domain"; } }, noOp: { isVoid: true, method: function(){ alert("Method not returning any data"); } } } }); }
相关推荐
在JavaScript编程中,跨域(Cross-Origin)是一个常见的问题,特别是在Web开发中,当尝试从一个源(如一个域名、协议或端口)加载资源到另一个源时,浏览器的安全策略通常会阻止这种行为,以防止恶意脚本从不受信任...
JavaScript跨域和Ajax跨域是Web开发中常见的问题,尤其在进行前后端分离或API调用时,由于浏览器的同源策略限制,不同域名、协议或端口的资源请求会被阻止,这就是所谓的“跨域”。本文将深入探讨JavaScript和Ajax...
在使用ArcGIS API for JavaScript开发Web应用程序时,经常会遇到跨域问题。这是因为浏览器的安全策略限制了JavaScript从一个源(域名、协议或端口)请求另一个源的数据。ArcGIS API for JavaScript是一个强大的工具...
JSONP是一种早期解决跨域问题的方式,通过动态创建`<script>`标签来加载指定URL的JavaScript文件。服务器返回的不是JSON数据,而是包含回调函数的JavaScript代码,客户端预先定义好这个回调函数,从而能够处理返回的...
### JavaScript父子页面跨域通信详解 #### 一、引言 在现代Web开发中,跨域通信是一个常见的问题。由于浏览器的安全策略——同源策略(Same-origin policy)的存在,JavaScript在处理不同源之间的数据交互时会受到...
4. WebSocket:WebSocket协议提供全双工、低延迟的双向通信,它在建立连接时就已经解决了跨域问题。服务器只需要在响应头中包含`Sec-WebSocket-Origin`字段,指定允许的源即可。 5. Iframe:通过嵌入一个可跨域的...
这种方式可以避免跨域问题,但增加了网络延迟。 5. WebSocket WebSocket协议支持跨域,可以建立持久化的双向通信连接。创建WebSocket对象时,URL可以是任意源,只要服务器支持WebSocket并允许跨域即可。 6. window...
实现javascript跨域,可以在不同域名双向通信,内含demo,支持IE6+、火狐,谷歌等浏览器 配套文章:http://blog.csdn.net/mycwq/article/details/16344171
"Javascript Debug Toolkit 1.0.2"是一款专为解决这一问题而设计的强大工具,它允许开发者在跨域环境中高效地进行调试工作。 这款工具提供了多种高级功能,例如设置断点,这使得开发者可以在代码的特定位置暂停执行...
3. **iframe跨域问题**:当iframe加载的页面与包含它的页面不在同一个域时,就会出现跨域问题,导致无法直接通过JavaScript进行通信,如获取iframe内的内容、设置iframe的属性等。 **二、iframe跨域的解决方案** 1...
javascript 跨域问题以及解决办法 什么是跨域问题? 跨域这个问题是由于浏览器的同源策略引起的,请求的URL地址,必须与浏览器的URL是相同协议、相同域名、相同端口的,否则是不允许访问的 浏览器URL 要访问的...
JavaScript(简称“JS”)是一种高级的、解释型的编程语言。它是一种轻量级,通常用于网页上,实现客户端的脚本编程。虽然JavaScript和Java在名称上相似,但它们是两种完全不同的语言,具有不同的编程范式、语法和...
### JavaScript跨域总结与解决办法 #### 跨域的基本概念 跨域问题源自于浏览器的安全策略之一——**同源策略**。同源策略是浏览器为了防止恶意网站通过脚本访问其他网站的数据而采取的一种安全措施。它规定了一个...
Nginx 跨域问题解决方案 Nginx 是一个流行的开源 Web 服务器软件,广泛应用于 Web 服务器管理。然而,在使用 Nginx 进行服务器管理时,经常会遇到跨域问题。跨域问题是指在不同的域名、端口或协议下,无法访问...
然而,随着互联网的发展,开发者常常需要在不同源之间共享数据,这就涉及到了JavaScript的跨域问题。本文将对JavaScript跨域进行深入的总结。 1. 同源策略 同源策略是浏览器为了保护用户信息安全而设定的一项机制,...
同源策略与 File 协议导致的跨域问题解决方案 同源策略是出于安全考虑而诞生的约定,规定了只能在本域内进行资源访问。所谓同源是指“协议+域名+端口”三者相同。不同源之间进行资源访问,就需要跨域。特殊地,有三...
### 前端后端跨域问题解析及解决方案 #### 跨域问题概述 跨域问题,即Cross-Origin Resource Sharing(CORS),是指浏览器出于安全考虑,在不同源之间执行网络请求时实施的一种限制机制。根据同源策略的规定,只有...
当我们在Cesium中尝试加载由Geoserver提供的地图服务时,可能会遇到跨域问题。这个问题主要是由于浏览器的安全策略限制了不同源之间的通信。以下是对这个问题的详细解释和解决方法。 首先,理解“跨域”是什么至关...
JavaScript跨域问题,是Web开发中常见的一个挑战,由于浏览器的同源策略限制,JavaScript无法直接访问不同源的资源,这在实现某些功能时会带来不便。本文将深入探讨JavaScript跨域问题的原因、影响以及多种解决方案...
解决arcgis server跨域问题: 1、停掉ArcGIS Server的服务。 2、 打开<ArcGIS Server> \framework\runtime\tomcat\conf\web.xml,注册跨域bean 3、lib下拷贝 cors-filter-2.5.jar java-property-utils-1.9.1.jar包 4...