Может ли JavaScript загружать XML-данные из стороннего домена?
-
20-08-2019 - |
Вопрос
Может ли JavaScript загрузить RSS-XML-канал из Yahoo?
Разрешен ли клиентскому JS доступ к сторонним доменам?
Решение
Вы можете использовать технику, описанную в моем сообщении в блоге Неписаное руководство по языку запросов Yahoo
Вы бы запросили таблицу XML-данных с помощью yql statment следующим образом:
select * from xml
where url="http://path/to/xml
Затем вы должны добавить тег script в свой html (это можно сделать с помощью document.createElement('script')) с помощью src http://query.yahooapis.com/v1/public/yql?q ={ваш yql здесь}&format=json&callback={ваша функция здесь}, где {ваш yql здесь} заменяется на версию вашего yql statment в кодировке URI.
Другие советы
Простой способ сделать это - направить запрос через прокси-сервер, на котором находится ваша страница.Шаги являются:
- Напишите серверный скрипт, выполняющий http-запрос к rss-каналу, когда сам этот скрипт является запросом (т.е.через get или post)
- Используйте ajax для запроса сценария на стороне сервера или просто вызовите его из основного сценария для этой страницы.
- Затем скрипт на стороне сервера возвращает источник канала в некоторой отображаемой форме.
- Прибыль!
В IE 8 и FF 3.1 (не уверен) можно выполнять эти запросы с помощью специализированных межсайтовых вызовов, но браузеры последнего поколения по-прежнему будут вызывать проблемы.Видишь:
http://dannythorpe.com/2009/01/15/ie8-cross-domain-request-support-demo/ http://ejohn.org/blog/cross-site-xmlhttprequest/ Функция ограничена в FF 3.0, неясно, вернется ли она в 3.1
Однако описанные выше шаги гарантированно не приведут к нарушению безопасности CSS браузера за счет некоторого запаздывания и дополнительной нагрузки hw на ваш сервер.
Вы можете использовать API канала Google загрузить RSS на JavaScript с любого домена / сервера.Это больше, чем просто прокси-сервер, он фактически обслуживает RSS-контент из кэша Google вместо того, чтобы обращаться к исходному серверу.Это может стать спасением для небольших серверов, которые не могут справиться с резкими скачками трафика Slashdot.
Я использовал Feed API для межсайтового доступа к RSS в статья о Silverlight несколько лет назад.
Я не уверен насчет JS, но я знаю, что вы можете использовать один из API-интерфейсы Google и у них есть RSS-ридер.Я знаю, что это, вероятно, не то, что вы хотите, но если вы ознакомитесь с документацией, возможно, вы сможете получить свой ответ о том, как это работает.
Не напрямую.Вы можете воспользоваться предложением Даны о проксировании запроса или изучить метод с именем JSONP, который по сути оборачивает возвращаемый объект JSON в пользовательскую функцию обратного вызова, запрошенную тегом скрипта, который вы вводите в свой DOM.Большинство поставщиков API поддерживают это (включая API Yahoo).