实现不同域(Domain)之间的数据交换
"实现不同域(Domain)之间的数据交换" 在 Web 应用开发中,经常会遇到需要在两个帧之间传递数据的情况,这里的帧可以是 frameset 中的 frame 也可以是独立的窗口。常见的情况是一个帧作为应用的主体,另一个帧则提供一些供用户选择的选项,用户选择完毕后,该帧把用户作出的选择发送到服务器并向主要的帧传递一些信息。这里的信息可能是用户的选择也可能是服务器返回的数据。当两个帧中的内容同属于一个域时实现以来比较简单,但是当它们分属于不同域时问题就变得复杂而棘手了,因为这里涉及到了数据访问的安全性问题,搞不好就会遇到浏览器返回的“拒绝访问(Access Denied)”的错误信息。 为解决这个问题,我们可以通过以下几个方法来实现两个帧之间的数据交换: 1. 利用客户端脚本(如 JavaScript)和窗口句柄在两个帧之间传递数据 这个方法是最为轻量级的方式之一,不会增加服务器的负载也不会占用网络带宽,数据交换完全是在客户端完成。我们可以通过 JavaScript 来实现一个域内的数据交换。例如,在新闻编辑界面中,我们可以使用 JavaScript 来从弹出窗口传递图片上传的 URL 给主窗口,以便在主窗口中预览上传的图片。 2. 利用 MSIE 提供的对话框在两个帧之间传递数据 这个方法需要使用 MSIE 浏览器提供的对话框来传递数据。该方法可以在两个帧之间传递数据,但是需要用户进行确认,对用户体验不友好。 3. 利用服务器端的应用,通过 session 来传递数据 这个方法需要使用服务器端的应用来传递数据。该方法可以在两个帧之间传递数据,但是需要服务器端的支持,并且可能会增加服务器的负载。 在实现数据交换时,需要注意的是,在不同的域之间传递数据需要注意安全性问题,以免出现“拒绝访问(Access Denied)”的错误信息。为解决这个问题,可以使用 document.domain 属性来指定两个域中的页面,使得它们可以相互传递数据。 实现不同域之间的数据交换需要根据具体情况选择合适的方法,并注意安全性问题,以确保数据交换的安全性和可靠性。