Google刚刚发布了Google AJAX Feed API ,文档和范例在这里。
【背景】流行的AJAX程序都大量使用了JavaScript和XMLHttpRequest,而XMLHttpRequest遵循同源策略,即通常所说的跨域问题。什么是同源策略:一般情形下,为安全起见,浏览器不允许你在客户端通过XMLHttpRequest访问别的域,默认你只能存取同域名、同一端口、同一协议下的资源。这给我们造成了麻烦,很明显,在不少情形下,获取别的网站的信息/服务是非常有用的。
【解决方案】通常解决方法有三种:
- 在同一域的服务器端建立一个代理,浏览器向该代理网址发送请求,然后该代理向其他域的网址发请求,在获取回复后,或作处理或按原样发回到浏览器。
- 使用按需(On-Demand) Javascript 脚本。在页面内动态生成新的,将其src属性指向别的网站的网址,这个网址返回的内容必须是合法的Javascript脚本,常用的是JSON消息。
- 使用IFRAME。在页面内嵌或动态生成指向别的网站的IFRAME,然后这2个网页间可以通过改变对方的anchor hash fragment来传输消息。
都是比较麻烦的。
后来,yahoo提供了
Yahoo Pipes,一个可视化界面的feed聚合服务程序,业界评价挺高,当然还有
其他几个mashups程序可供选择。但是Google AJAX Feed API可能是最适合developer使用的了。
【Google AJAX Feed API】 现在你只要书写几行JavaScript程序,不再需要建立复杂的服务器端代理,Google代劳了所有mashups开发。
【延伸阅读】关于 Cross Site AJAX:
1. Security Considerations: Dynamic HTML
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp
2. About Cross-Frame Scripting and Security
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp
3. Cross-Domain Proxy
http://ajaxpatterns.org/Cross-Domain_Proxy
4. Cross Domain XMLHttpRequest using an IFrame Proxy
http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75
5. Back Button Support for Atlas UpdatePanels
http://www.nikhilk.net/BackButtonSupport.aspx
6. Cross-document messaging hack
http://blog.monstuff.com/archives/000304.html
7. Calling web services hosted outside of your application with "Atlas"
http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx
http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip
8. AJAX Tip: Passing Messages Between iframes
http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15