На нашем сайте www.foo.com
мы хотим скачать и использовать http://feeds.foo.com/feed.xml
с Javascript. Мы, очевидно, использовать Access-Control но для браузеров, которые не поддерживают его, мы рассматриваем следующие как запасной вариант:Загрузка кросс-домена XML с помощью Javascript с использованием гибридной концепции iframe-proxy/xsl/jsonp?
На 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
и использовать его для преобразования исходного материала в HTML-документ, который также устанавливает document.domain
и вызывает функцию обратного вызова в его родителя с данными подачи, как 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>
Есть ли лучший способ загрузки XML из feeds.foo.com и каковы последствия этого IFrame-прокси/XSLT/JSONP трюк? (..и в каких случаях это не получится?)
Замечания
- Это не работает в Safari & Chrome, но так как поддержка Access-Control это нормально.
- Мы хотим, чтобы мало или нет изменений в
feeds.foo.com
- Мы отдаем себе отчет (но не заинтересован в) на стороне сервера прокси-решения
- обновление:wrote about it
, так что вы знаете, с easyXDM нет необходимости доверять другой стороне - эти два документа обмениваются только потоками. –