在我们之前的一篇文章中,我们谈到了在我们的应用程序Visual Website Optimizer中与不同领域的框架进行通信时所面临的问题,并强调了每个问题的可能解决方案。
我们很自豪地宣布please.js,一个基于请求/响应的跨域通信。如果你曾经在跨域框架通信中遇到过问题,不要害怕--只要说请就可以了!
什么是please.js?
please.js是一个围绕PostMessage API的基于请求/响应的包装器,它利用了jQuery Promises。这里有一个快速的例子来加载一个iframe窗口的位置:
var frameWindow = $('iframe').get(0).contentWindow;
please(frameWindow).call('window.location.reload');
please.js是基于jQuery和jQuery Promise API之上的。为了使不同域名上的两个窗口之间的通信正常,它们都必须注入相同版本的jQuery和please.js。
目前,please.js是一个alpha版本(0.1.0)。下一步,我们希望增加一些功能,如支持Chrome扩展程序中的通信,并改进文档,使所有用户都能轻松上手。
它是如何工作的
底层概念很简单。两个框架需要异步地相互通信。要访问页面上的一个子框架,父框架会向子框架发送一个please.Request 。Request 对象很像浏览器发送给服务器的请求。它包含了在子框架中需要做的事情的信息(调用一个函数,获取/设置一个属性或变量,或使用jQuery访问一个DOM节点)。子框架向父框架发送一个please.Response ,其中包括父框架所要求的结果。对于一个函数调用请求,它是该函数的返回值,而对于一个获取请求,返回的是变量/属性的值。