写点什么

CrossFrame:为 Mashup 准备的安全的器件间跨域通信

  • 2007-11-29
  • 本文字数:1304 字

    阅读完需:约 4 分钟

来自 Yahoo! 的 DHTML 传道团队的 Julien Lecomte,宣布发布“ CrossFrame,一种安全的跨文档和跨域的通信机制”。按照 Julien 的说法,这种“Hack”的手段,能让同一页面上来自不同域的 IFrames 互相通讯。传统上出于安全方面的考虑,不同域上资源的通讯比较困难,这就是浏览器上所谓的“同源策略(Same Origin Policy)”。CrossFrame 以 URL 片段标识符(URL fragment identifier) 作为构建的基础,着手解决了两方面重要的问题:

  • 接受者必须进行轮询,导致无谓的 CPU 开销。
  • 在 Safari 和 Opera 上产生“伪”历史记录。

CrossFrame 让跨域的各站点都共享宿主页面上使用的变量。流程主要分两步:

为了能够与在 Y 域上运行的 Mashup 通信,位于 X 域的页面动态创建一个隐藏的 IFrame 并指向位于 Y 域的一个特殊的代理文件,并利用 URL 片段标识符来运送消息。(第一步)当这个位于隐藏 IFrame 的特殊代理文件加载完毕后,就读取它的 URL 片段标识符,并将之传递给容纳了 Mashup 的 IFrame 内的一段全局函数,(第二步)使用 parent.frames[‘mashup’] 就可获取到所需对象。

使用 CrossFrame 非常简单,安装一个代理文件,导入所需的 JavaScript 库文件,就可以通过 JavaScript 代码开始发送与接收:

登记 onMessage 事件以接收信息:

YAHOO.util.CrossFrame.onMessageEvent.subscribe(<br></br>    function (type, args, obj) {<br></br>        var message = args[0];<br></br>        var domain = args[1];<br></br>       // 以下处理接收到的信息 <br></br>    }<br></br>);要发送信息,调用 YAHOO.util.CrossFrame.send():

YAHOO.util.CrossFrame.send("http://www.y.com/proxy.html",<br></br>                           "frames['mashup']",<br></br>                           "message");

相关的演示已经准备好,可从中了解一下它在浏览器运作的实际情形。

Facebook 在他们的 Beacon 工具中亦使用 IFrames 的思路来实现通讯。在 Jay Goldman 的一篇《 Deconstructing Facebook Beacon Javascript 》博文中,他把这种方法形容为:

对现代浏览器的跨域脚本安全特性的一种漂亮的规避。

在文章的结尾,Julien 也告诫了使用 CrossFrame 带来的危害:

这种 Hack 手法会带来危险。首先,浏览器的厂商可能会更改它们的安全策略,比如改成像 Opera 那样的行为。

他接着说 > 而且,我不推荐使用 Hack 因为它们会减缓 Web 的革新速度。

最后结论 > 因此,虽然看起来有点矛盾,我不推荐使用 CrossFrame(或者任何其他不堪的 hack 手段)。

令人遗憾,时下谈到合乎规范的页面内器件通信技术,开发者的选择并不多。虽然已经在拟订相关的草案来解决这个问题,但是距离浏览器的标准化实现还需一段时间。与此同时,如果有些事情非要在现在的浏览器上就做到,那么CrossFrame Hack 也不失为一种可行的方案。

查看英文原文: CrossFrame - Safe, Cross Domain Widget Coordination for Mashups - - - - - -

译者简介:Frank Cheung 有多年 Web 前端开发经验,动态语言爱好者。负责 EXT 中文站( www.ajaxjs.com )JavaScript 开源论坛 Js 堂( jstang.5d6d.com )的维护工作。专注 Ajax 和 WebUI, 从 YUI-Ext 起,翻译了不少 EXT 相关的资料。

2007-11-29 19:41930

评论

发布
暂无评论
发现更多内容

【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析

洛神灬殇

redis高可用 MySQL 高可用 集群 12 月 PK 榜

redux原理是什么

xiaofeng

React

react组件深度解读

xiaofeng

React

软件测试 | Github 必会高频基础命令与 IDE 的 Git 集成

测试人

GitHub 软件测试 自动化测试 测试开发

OpenHarmony社区运营报告(2022年11月)

OpenHarmony开发者

OpenHarmony

鸿蒙开发实例 | 为什么选择HarmonyOS?

TiAmo

华为 鸿蒙 华为云 12月月更

细说Js中的this

hellocoder2029

JavaScript

程序员最关心的问题,我都帮你们问AI了

大白给小白讲故事

AI写代码

CleanMyMac2024MACOS老牌清理软件

茶色酒

CleanMyMac CleanMyMac2024

kubernetes 1.26发布,这十项新特性值得关注!

BoCloud博云

Kubernetes 云原生

Webpack配置实战

Geek_02d948

webpack

Webpack最佳实践

Geek_02d948

webpack

FL Studio2024最新绿色版水果萝卜编曲软件

茶色酒

FL Studio FL Studio21 FL Studio2024

JS知识点梳理之作用域、作用域链、柯里化、闭包

hellocoder2029

JavaScript

PAI-Diffusion模型来了!阿里云机器学习团队带您徜徉中文艺术海洋

阿里云大数据AI技术

机器学习 算法 图文生成 12 月 PK 榜

react进阶用法完全指南

xiaofeng

React

Vue响应式系统原理并实现一个双向绑定

yyds2026

Vue

Vue响应式依赖收集原理分析-vue高级必备

yyds2026

Vue

云图说丨什么是应用身份管理服务OneAccess

华为云开发者联盟

云计算 后端 华为云 12 月 PK 榜

Vue实战必会的几个技巧

yyds2026

Vue

细说js变量、作用域和垃圾回收

hellocoder2029

JavaScript

ChatGPT完全火出圈了,你注册了吗?

Java全栈架构师

人工智能 程序员 AI 程序人生 ChatGPT

说说Nodejs高并发的原理

coder2028

node.js

裁员名额谁来背?优秀985硕士无故被裁,劣币驱逐良币错在谁?

Java永远的神

程序员 面试 程序人生 后端 架构师

传统大型国企云原生转型,如何解决弹性、运维和团队协同等问题?

Serverless Devs

阿里云携手百奥利盟发布云上精准医疗与创新生物药数字化解决方案,助力行业数字化转型

云布道师

阿里云

【敏捷研发系列】前端DevOps流水线实践

京东科技开发者

敏捷 前端 软件开发 运维‘ #DevOps

细说nodejs的path模块

coder2028

node.js

圆桌实录 | 为什么不约而同选择了大 Kernel

MegEngineBot

深度学习 开源 MegEngine 大 Kernel

Webpack构建速度优化

Geek_02d948

webpack

可观测性之Micrometer Tracing

宋小生

全链路监控 可观测性 链路追踪 micrometer 全链路

CrossFrame:为Mashup准备的安全的器件间跨域通信_安全_Gavin Terrill_InfoQ精选文章