AS3 Загрузка XML из другого домена - PullRequest
2 голосов
/ 20 июня 2010

Я пытаюсь загрузить XML-файл из Википедии в мой флэш-фильм.

loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, tweetLoaded);
loader.load(new URLRequest("http://en.wikipedia.org/w/api.php?action=query&rvprop=content&format=xml&pageids="+subNum));
loader.addEventListener(IOErrorEvent.IO_ERROR, onIOErrorFunction);

Это прекрасно работает, когда флэш-файл запускается локально, но когда я загружаю его в свой домен, он не работает,В другом месте я читал, что междоменное правило не относится к файлам XML только к изображениям и другим носителям.Это правда?Если нет, то есть ли обходной путь, чтобы я мог загружать файлы XML с доменов, отличных от того, на котором размещен swf?

спасибо

РЕДАКТИРОВАТЬ:

Хорошо, яя действительно запутался, моя программа запрашивает как Bing API, так и media wiki API.Вызов Bing API работает нормально, я могу получить результаты поиска XML из него отлично.Но звонок из Википедии не работает (онлайн).Я попытался прослушать ошибку Security_Error в вызове википедии, но он не срабатывает.

У кого-нибудь есть идеи?Немного потерять.

Ответы [ 2 ]

5 голосов
/ 22 июня 2010

Большое спасибо за помощь. В конце концов я использовал http://pipes.yahoo.com

Я создал канал, который принял идентификационный номер, затем выплюнул объект JSON с заголовком соответствующей страницы википедии.

который вы можете использовать здесь http://pipes.yahoo.com/wikibyid

Для всех, кто делает это, вам необходимо убедиться, что вы получаете доступ к каналу с URL API Yahoo. http://pipes.yahooapis.com/ так как этот домен имеет файл crossdomain.xml.

3 голосов
/ 20 июня 2010

Обходной путь - настроить прокси с некоторым языком на стороне сервера, поэтому ваш SWF-файл загружает данные из вашего домена . Этот прокси перенаправляет запрос на реальный хост и возвращает ответ в SWF. Со стороны вспышки это работает прозрачно.

Вы можете сделать свой прокси более или менее изощренным, но это может быть просто (в php):

echo file_get_contents($_GET['target_url']);

Это просто для того, чтобы дать вам представление, возможно, вы захотите проверить параметр target_url.

Пусть ваш swf вызовет этот php-скрипт и передаст target_url в качестве параметра. Примерно так:

var url:String = "proxy.php";
var paramVal:String = encodeURIComponent("http://en.wikipedia.org/w/api.php?action=query&rvprop=content&format=xml&pageids="+subNum);
url += "?target_url=" + paramVal;
loader.load(new URLRequest(url));

Обратите внимание, что для php для этого потребуется разрешить fopen для URL-адресов (аналогичные разрешения могут быть необходимы для других технологий на стороне сервера). Кроме того, имейте в виду, что это повлияет на пропускную способность вашего сервера.

PS

Bing работает, потому что у них есть файл политики междоменного доступа, позволяющий получить доступ к swfs из других доменов.

http://api.bing.net/crossdomain.xml

В Википедии нет файла междоменной политики, который предоставляет вам доступ из других доменов, поэтому вы не можете подключиться напрямую со своего SWF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...