getXDM或JSONP用于绕过相同的原始策略

时间:2011-02-05 15:59:38

标签: javascript ajax widget same-origin-policy

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

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

我已经浏览了此网站上的上一个discussions,并找到了以下可能的解决方案:

  1. JSONP(可与我的WCF服务一起使用)
  2. 隐藏的iframe(不可能,因为我无法控制两个域)
  3. window.postMessage(不确定JavaScript库是否可以在旧浏览器中使用,即IE6)
  4. 跨源资源共享(CORS)(不可能,因为我希望能够运行旧浏览器,即IE6)
  5. 反向代理方法(不可能因为我无法控制用户网站的服务器)
  6. easyXDM(可能是一种可能的解决方案,但需要探索如何在我的WCF服务中使用它)
  7. 首先,我想与你们确认,我对不同方法所做的简要分析是正确的,我不会错过任何人使用的任何重要解决方案,如果我的分析是正确的,我想讨论这些方法的利弊。

    其次我知道Facebook,Twitter,Google都会分享他们的应用程序(完全按我想要的方式分享)并且为了这样做而克服了这个问题,任何人都能指出我能找到更多的方向关于他们如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

这是你需要根据

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

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

Google等使用“彗星”类型的解决方案,其中像客户端和服务器之间的插件一样持久存储。这不应该用于小部件,因为它会占用浏览器资源。