Загрузка междоменного XML с помощью Javascript с использованием гибридной концепции iframe-proxy/xsl/jsonp?

StackOverflow https://stackoverflow.com/questions/1875379

Вопрос

На нашем сайте www.foo.com мы хотим скачать и использовать http://feeds.foo.com/feed.xml с Javascript.Мы, очевидно, будем использовать Контроль доступа но для браузеров, которые его не поддерживают, мы рассматриваем в качестве запасного варианта следующее:

На 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-proxy/xslt/jsonp?(..и в каких случаях это выйдет из строя?)


Примечания

  • Это не работает в Safari и Chrome, но поскольку оба поддерживают Контроль доступа все в порядке.
  • Мы хотим незначительных изменений или вообще не хотим их feeds.foo.com
  • Мы знаем (но не заинтересованы в) прокси-решениях на стороне сервера.
  • обновлять: написал об этом
Это было полезно?

Решение

Если у вас есть контроль над обоими доменами, вы можете попробовать библиотеку междоменных сценариев, например EasyXDM, который реализует особенности кроссбраузерности и предоставляет простой в использовании API для взаимодействия в клиентском скрипте между различными доменами с использованием наилучшего доступного механизма для этого браузера (например, сообщениеСообщение если имеются, то другие механизмы, если нет).

Предостережение:вам необходимо иметь контроль над обоими доменами, чтобы он работал (где «контроль» означает, что вы можете размещать статические файлы на обоих из них).Но вам не нужны какие-либо изменения кода на стороне сервера.

Еще одно предостережение:здесь есть последствия для безопасности - убедитесь, что вы доверяете сценарию другого домена!

Другие советы

Вы можете использовать Yahoo API (YQL)..Просто укажите URL, формат и обратный вызов

Это своего рода серверное решение, но не на вашем сервере :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top