1

我正在创建一个 JavaScript 小部件,它从我托管的 WCF 服务中获取大约 4-6KB 的数据,并使用画布标签(HTML5)来绘制一些图表。我希望任何人都能够通过复制粘贴我共享的一些 html 和 JavaScript 来将此小部件嵌入到他们的网站中。

现在的问题:同源策略,它不允许从小部件的主机域到我域上的 WCF 服务的任何 XHR 请求,这意味着使用小部件的任何人都无法从我的 WCF 服务获取数据(每个请求都会得到大约 4-6kb 的数据作为响应)。

我已经浏览了该站点上的先前讨论,并找到了以下可能的解决方案:

  1. JSONP(可以与我的 WCF 服务一起使用)
  2. 隐藏的 iframe(不可能,因为我无法控制这两个域)
  3. window.postMessage(不确定 JavaScript 库是否可以在旧浏览器 IE6 中运行)
  4. 跨域资源共享 (CORS)(不可能,因为我希望能够使用旧浏览器,即 IE6)
  5. 反向代理方法(不可能,因为我无法控制用户网站的服务器)
  6. easyXDM(可能是一个可能的解决方案,但需要探索如何将它与我的 WCF 服务一起使用)

首先,我想与你们确认,我对可能的不同方法所做的简要分析是正确的,我不会错过任何人正在使用的任何好的解决方案,如果我的分析是正确的,我想讨论一下优点以及这些方法的缺点。

其次,我知道 Facebook、Twitter、Google 都分享了他们的应用程序(正是我想要分享的方式)并且已经克服了这个问题以便这样做,任何人都可以指出我可以找到更多关于他们如何已经解决了这个问题。

4

1 回答 1

0

这是你需要根据来判断的东西

  • 您的小部件可以接受多大,包括库。
  • 您需要多久轮询一次服务,或者它是否是一次性事件。
  • 完整的浏览器兼容性对您来说有多重要。

对于您描述的特定用例,我建议使用 JSONP。它将保持小部件非常小,是一个很好的跨浏览器解决方案,并且可以处理适度的数据需求。

谷歌等使用“彗星”类型的解决方案,其中像流一样的套接字在客户端和服务器之间保持不变。这不应该用于小部件,因为它会占用浏览器资源。

于 2011-02-05T16:15:10.870 回答