`
conkeyn
  • 浏览: 1518420 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

JS实现不同域(Domain)之间的数据交换

阅读更多

http://blog.csdn.net/xymyeah/archive/2007/04/22/1575061.aspx

 

实现不同域(Domain)之间的数据交换

引言

前些天在对公司原有的 web 应用进行改版时遇到一个问题,当时需要从原有的应用中提取出一部分,用一个更为通用的来进行替换,并且仍然保留原有的应用接口。原有的应用属于 news.mycompany.com 域,而新应用将被部署到 upload.mycopany.com。当我试着从新的域向 news.mycompany.com 传递数据时,在前台遇到了浏览器返回的“拒绝访问(Access Denied)” 的错误信息,通过参考在 google 中查到的大量英文资料找到了问题的症结,并通过指定两个域中页面的 docment.domain 属性使问题得到了部分解决。后来一时兴起在 google 中查找与 document.domain 相关的中文资料,但得到的大部分是网络安全方面的文章,很少有文章提及通过指定页面的 document.domain 属性能够实现两个域之间的数据交换,于是决定写下此文,希望能够做到抛砖引玉吧。

关键字: JavaScript, Domain, Access Denied
日期:2003-07-06

 

问题的提出

在开发 Web 应用时经常会遇到需要在两个帧之间传递数据的情况,这里的帧可以是 frameset 中的 frame 也可以是独立的窗口。常见的情况是一个帧作为应用的主体,另一个帧则提供一些供用户选择的选项,用户选择完毕后,该帧把用户作出的选择发送到服务器并向主 要的帧传递一些信息,这里的信息可能是用户的选择也可能是服务器返回的数据。当两个帧中的内容同属于一个域时实现以来比较简单,但是当它们分属于不同域时 问题就变得复杂而棘手了,因为这里涉及到了数据访问的安全性问题,搞不好就会遇到浏览器返回的“拒绝访问(Access Denied)” 的错误信息。

可能的解决方案

下面我们将通过几个试验来分析一下在分属于不同域的帧之间传递数据的一些方法。

  • 利用客户端脚本(如 JavaScript)和窗口句柄在两个帧之间传递数据
  • 利用 MSIE 提供的对话框在两个帧之间传递数据
  • 利用服务器端的应用,通过 session 来传递数据

方案一

用客户端脚本实现两个帧之间的数据交换应该是最为轻量级的方式之一了,这样做不会增加服务器的负载也不会占用网络带宽,数据交换完全是在客户端完成。下面就让我们先来了解一下用客户端脚本(以 JavaScript 为例)和窗口句柄如何实现一个域内的数据交换。

我们通过一个实例来进行说明:假设需要给用户提供一个新闻的录入界面,用户可以用它录入新闻的原始内容,并且可以在其中嵌入一副图片。为了实现这个功能界面我们设计了两个帧,或者说是两个窗口:

  • 主窗口: 新闻内容的主要编辑界面,用户可以在里面录入新闻的标题、作者、新闻主体等内容,还有一个图片框可以预览上传的图片
  • 弹出窗口: 处理图片上传的界面,用户可以选择本地图片进行上传,成功后它把服务器上文件的 url 返回给主窗口进行预览

为了简单起见,我们假设两个窗口中的内容都是静态的,主窗口对应的文件为 NewsEdit.html,弹出窗口对应的文件为 ImgUpload.html(而大多数情况下两个窗口的内容都应该是动态生成的)。

其中 NewsEdit.html 位于 news.mycompany.com 的主目录下,其源代码如下所示:

 

分享到:
评论

相关推荐

    实现不同域(Domain)之间的数据交换

    "实现不同域(Domain)之间的数据交换" 在 Web 应用开发中,经常会遇到需要在两个帧之间传递数据的情况,这里的帧可以是 frameset 中的 frame 也可以是独立的窗口。常见的情况是一个帧作为应用的主体,另一个帧则...

    Flash flex与JS通信

    标题中的"Flash Flex与JS通信"指的是如何让运行在Adobe Flash Player中的Flex应用与浏览器中的JavaScript代码进行数据交换和功能调用。这种通信机制通常被称为External Interface或Bridge技术,它允许Flex应用与网页...

    跨域 iframe 实例 (Cross-Domain Javascript execution library)

    跨域iframe是一个常见的Web开发技术,它允许网页嵌入来自不同源的iframe,以实现不同域之间的数据交互或页面组合。...通过学习这个实例,开发者可以掌握如何安全有效地实现不同源的页面之间的数据交换和功能协作。

    node-transform-domain:转换给定源域和目标域的值

    同样,如果你需要在不同系统之间进行数据交换,这个库也能简化数据格式转换的过程。 "node-transform-domain-master"这个压缩包文件名暗示它是项目的主分支,可能包含了项目的源代码、文档、测试用例等资源。为了...

    javascript跨域访问的方法.docx

    因为浏览器允许从不同源加载JavaScript文件,JSONP利用这一点来实现跨域数据交换。JSONP的核心是创建一个全局函数,服务器返回的JSON数据包裹在这个函数中,使得客户端可以执行这个函数并获取数据。 例如,一个HTML...

    在两个Silverlight应用间数据通信(包括与Flash通信)

    最后,"DataTranferInSL"很可能是一个包含Silverlight客户端代码的项目,这部分代码将处理与服务器的通信,以及与其他Silverlight或Flash应用的数据交换。数据传输可能利用JavaScript Bridge(Silverlight与HTML页面...

    flex iframe js

    总结来说,`flex iframe js`是一种结合了Flex的RIA能力和JavaScript的Web页面交互能力的技术,它通过`ExternalInterface`实现了ActionScript与JavaScript之间的数据交换和功能调用,从而丰富了Web应用的交互体验。...

    javascript跨域方案总结

    服务器和客户端只需要在握手阶段处理好跨域问题,之后的数据交换则不受同源策略限制。 7. 使用服务端渲染或后端代理 在服务器端生成HTML并返回给客户端,这样整个页面都在同一个源下,避免了跨域问题。此外,也可以...

    jquery跨域调用wcf

    在Web开发中,跨域(Cross-Origin)是一个常见的问题,特别是在使用JavaScript进行API...正确理解和使用这些技术,可以有效地在不同域之间实现数据交互。在实际项目中,应结合业务需求和安全因素选择合适的跨域策略。

    Ajax +jquery跨域获取JSON

    在IT行业中,Ajax(Asynchronous JavaScript and XML)与jQuery库的结合经常被用来实现异步数据交互,提高网页的用户体验。这里的"Ajax + jQuery跨域获取JSON"是一个典型的Web开发技术应用场景,主要用于解决Web应用...

    workspace20100228.rar

    这两种技术都可以用来实现ActionScript和JavaScript间的实时数据交换,但需要在服务器端进行相应的配合。 7. **Flex SP, zClipboard, OsWorkFlow, zClipboard** 这些文件名可能涉及到具体的库或工具。Flex SP可能...

    js json ajax jsp 跨域訪問的例子

    4. document.domain:如果主域相同,但子域不同的情况下,可以设置`document.domain`属性为相同的值,以实现跨子域访问。 5. window.postMessage:这是一种在不同源的窗口之间进行异步通信的方法,适用于如iframe、...

    js跨域解决方案.docx

    - 能够实现双向的数据交换。 - 兼容性较好。 **缺点**: - 实现起来较为复杂。 - 需要多个页面之间的配合。 ##### 4. 使用Apache反向代理实现跨域 这是一种服务器端的解决方案,通过配置反向代理服务器接收客户端...

    flex与JS交互示例

    Flex与JavaScript交互是Web开发中的一个重要技术,它允许在Adobe Flex应用和HTML页面之间进行数据交换和功能调用。在本示例中,我们将深入探讨如何实现这种交互,并通过具体的步骤来理解其工作原理。 首先,Flex是...

    JS跨域请求解决方案.docx

    - **实现原理**:两个页面都需要通过JavaScript设置`document.domain`为基础主域,从而实现同源。 - **示例代码** (父窗口:`www.domain.com/a.html`): ```html <iframe id="iframe" src="http://subdomain....

    Ajax常见面试题.pdf

    - document.domain:原理是让不同子域之间的页面设置相同的domain,实现跨域。这通常用于相同主域名不同子域名的情况。 - iframe:可以将一个域的页面嵌入到另一个域的页面中,实现跨域。但需要注意,设置iframe...

    Domain-to-Domain-Data-Transfer-Sender-App

    "域到域数据传输发件人应用"是一个基于JavaScript技术构建的应用程序,它设计用于在不同的网络域之间安全地传输数据。在Web开发中,由于同源策略(Same-Origin Policy)的限制,不同源的网站之间无法直接共享或访问...

    跨域点单登录源码SSO_cross_domain

    在Web开发中,浏览器的同源策略限制了JavaScript对不同域名下的资源进行访问,以防止恶意网站窃取数据。跨域是指一个域下的文档或脚本尝试请求另一个域下的资源。在跨域点单登录场景下,用户在多个子站点之间切换时...

Global site tag (gtag.js) - Google Analytics