编程语言
首页 > 编程语言> > 使用混合iframe-proxy / xsl / jsonp概念使用Javascript加载跨域XML?

使用混合iframe-proxy / xsl / jsonp概念使用Javascript加载跨域XML?

作者:互联网

我们希望在我们的网站www.foo.com上下载并使用带有Javascript的http://feeds.foo.com/feed.xml.我们显然会使用Access-Control,但对于不支持Access-Control的浏览器,我们考虑将以下内容作为备用:

在www.foo.com上,我们设置document.domain,提供一个回调函数,并将提要加载到一个(隐藏的)iframe中:

document.domain = 'foo.com';
function receive_data(data) {
 // process data
};

var proxy = document.createElement('iframe');
proxy.src = 'http://feeds.foo.com/feed.xml';
document.body.appendChild(proxy);

在feeds.foo.com上,将XSL添加到feed.xml并将其用于将feed转换为html文档,该文档还将设置document.domain并在其父级中使用feed数据作为json调用回调函数:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
 <xsl:template match="ROOT">
  <html><body>
   <script type="text/javascript">
    document.domain = 'foo.com';
    parent.receive_data([<xsl:apply-templates/>]);
   </script>
  </body></html>
 </xsl:template>
 <!-- templates that transform data into json objects go here -->
</xsl:stylesheet>

是否有更好的方式从feeds.foo.com加载XML,此iframe-proxy / xslt / jsonp技巧的后果是什么? (..在什么情况下会失败?)

备注

>在Safari&中无法使用Chrome,但由于两者都支持Access-Control,所以很好.
>我们希望feeds.foo.com几乎没有变化
>我们知道(但不感兴趣)服务器端代理解决方案
>更新:wrote about it

解决方法:

如果您可以同时控制两个域,则可以尝试使用跨域脚本库(例如EasyXDM),该库包装了跨浏览器的怪癖,并提供了一种易于使用的API,可以使用针对该域的最佳可用机制在客户端脚本中进行通信.浏览器(例如,如果有postMessage,则没有其他机制).

注意:您需要同时控制两个域才能使其正常工作(“控制”意味着您可以在两个域上都放置静态文件).但是您不需要任何服务器端代码更改.

另一个警告:这里涉及安全性-确保您信任另一个域的脚本!

标签:cross-site,cross-domain,xml,javascript
来源: https://codeday.me/bug/20191210/2101313.html