document.write('

解析:

(1)Web 代理的方式。即用户访问 A 网站时所产生的对 B 网站的跨域访问 请求均提交到 A 网站的指定页面,由该页面代替用户页面完成交互,从而返回 合适的结果。此方案可以解决现阶段所能够想到的多数跨域访问问题,但要求 A 网站提供 Web 代理的支持,因此 A 网站与 B 网站之间必须是紧密协作的,且 每次交互过程,A 网站的服务器负担增加,无法代用户保存 session 状态。

(2)on-Demand 方式。MYMSN 的门户就是用的这种方式,不过 MYMSN 中不涉及跨域访问问题。动态控制 script 标记的生成,通过修改 script 标记的 src 属性完成对跨域页面的调用。此方案存在的缺陷是,script 的 src 属性完成该 调用时,采取的是 get 方式,如果请求时传递的字符串过大,程序可能会无法正 常运行。不过此方案非常适合聚合类门户使用。

(3)iframe 方式。在 javaeye 上有一篇关于跨域访问的帖子,它提到有人已 经用 iframe 的方式解决了跨域访问问题。数据提交和获取,采用 iframe 这种方 式的确可以,但由于父窗口与子窗口之间不能交互(跨域访问的情况下,这种 交互被拒绝),因此无法完成对父窗口效果的影响。

(4)用户本地转储方式。IE 本身依附于 Windows 平台的特性为我们提供 了一种基于 iframe 利用内存来“绕行”的方案,即两个 Window 之间可以在客 户端通过 Windows 剪贴板的方式进行数据传输,只需要在接收数据的一方设置 Interval 进行轮询,获得结果后清除 Interval 即可。Firefox 的平台独立性决定了 它不支持剪贴板这种方式,而以往版本的 Firefox 中存在的插件漏洞又被 fixed 了,所以 Firefox 无法通过内存来完成暗度陈仓。而由于文件操作 Firefox 也没 有提供支持(无法通过 Cookie 跨域完成数据传递),致使这种技巧性的方式只 能在 IE 中使用。

(5)结合了前面几种方式,在访问 A 网站时,先请求 B 网站完成数据处 理,再根据返回的标识来获得所需的结果。这种方法的缺点也很明显,即 B 网 站的负载增大了。其优点在于,对 session 实现了保持,同时 A 网站与 B 网站页 面间的交互能力增强了。

');