【发布时间】:2011-06-21 22:17:37
【问题描述】:
我正在创建一个 JavaScript 小部件,它从我托管的 WCF 服务中获取大约 4-6KB 的数据,并使用画布标签 (HTML5) 来绘制一些图表。我希望任何人都能够通过复制粘贴我共享的一些 html 和 JavaScript 来将此小部件嵌入到他们的网站中。
现在的问题:同源策略,它不允许从小部件的主机域到我域上的 WCF 服务的任何 XHR 请求,这意味着使用小部件的任何人都无法从我的 WCF 服务获取数据(每个请求将获得大约 4-6kb 的数据作为响应)。
我翻遍了本站之前的discussions,找到了以下可能的解决方案:
- JSONP(可以与我的 WCF 服务一起使用)
- 隐藏的 iframe(不可能,因为我无法控制这两个域)
- window.postMessage(不确定 JavaScript 库是否可以使其在旧浏览器(即 IE6)中运行)
- 跨域资源共享 (CORS)(不可能,因为我希望能够运行旧浏览器,即 IE6)
- 反向代理方法(不可能,因为我无法控制用户网站的服务器)
- easyXDM(可能是一个可能的解决方案,但需要探索如何将它与我的 WCF 服务一起使用)
首先,我想与你们确认,我对可能的不同方法所做的简要分析是正确的,我不会错过任何人正在使用的任何好的解决方案,如果我的分析是正确的,我想讨论这些方法的优缺点。
其次,我知道 Facebook、Twitter、Google 都分享了他们的应用程序(正是我想要分享的方式)并且已经克服了这个问题以便这样做,谁能指出我可以找到更多的方向关于他们是如何解决这个问题的。
【问题讨论】:
-
easyXDM 可以轻松适应这种情况 - 只需看一下 xhr/CORS 示例。但是对于您所描述的,由于成本较低,我可能会选择 JSONP。但是,如果您打算扩展小部件,那么 easyXDM 绝对是要走的路 - 您提到的网站遵循 easyXDM 促进的相同模式(Twitter 甚至使用 easyXDM)。
-
在我自己调查过之后,你已经把所有值得一看的东西都列在了清单上。正如 leeeb 的回答所说,不在概率 JSONP 之间。那个或easyXDM。
标签: javascript ajax widget same-origin-policy