Загрузка XML-файла извне SWF-файла во Flash - PullRequest
4 голосов
/ 28 октября 2008

Веб-сайт, над которым я работаю (использующий AS2, потому что это oldschool), имеет больший индексный файл .swf, который загружает вложенные файлы SWF, используя loadMovie("foo1.swf", placeToShowSwf). Есть foo1.swf через 4, что глупо, потому что единственное, что отличается между ними, - это одно число в адресе XML-файла, которое сообщает ему, какой контент загружать. Поэтому я хочу сократить это до одного файла с помощью простой функции, которую индексный файл вызывает для загрузки XML-файла, как показано здесь.

function setFooNum(i:Number) {
   fooNum = i;
   //my_xml = new XML();  edit: this line has since been removed and is kept for historical purposes
   my_xml.load("foo"+fooNum+".xml");
};

Однако по какой-то причине XML-файл не загружается. Он загружается должным образом вне функции, но это не очень мне помогает. Он корректно меняет fooNum, но это не приносит мне никакой пользы, если уже загружается неправильный XML-файл. Насколько я могу судить, код ведет себя так, как будто my_xml.load("foo"+fooNum+".xml") вообще не существует.

Это какая-то мера безопасности, о которой я не знаю, и есть ли способ ее обойти?

EDIT Как отмечали несколько человек, виновником была линия my_xml = new XML(). К сожалению, сейчас я получаю новую и захватывающую ошибку. Когда setFooNum(i) вызывается сразу после loadMove() в индексном файле, trace(fooNum) внутри функции setFooNum() печатает, что fooNum установлен правильно, но trace(fooNum) внутри onLoad() (что возвращает успех, несмотря на то, что загрузка видимо ничего, кстати) показывает, что fooNum не определено! Кроме того, я сделал кнопку в индексе swf, которая вызывает setFooNum(3) (для целей отладки), что по какой-то причине заставляет ее работать нормально. Поэтому ожидание загрузки файла несколько секунд, похоже, решает проблему, но это невероятно уродливое решение.

Итак, как мне ждать, пока все полностью загрузится, прежде чем вызывать setFooNum()?

Ответы [ 4 ]

1 голос
/ 23 ноября 2009

Возможно, вам следует еще раз проверить правильность авторизации в crossdomain.xml. Если ваш междоменный файл будет заблокирован, ни один из ваших запросов не будет обработан.

http://crossdomainxml.org/

0 голосов
/ 28 октября 2008

Предполагая, что вы определили обработчик события onLoad для экземпляра XML вне функции, вы можете удалить объявление экземпляра из тела функции:

function setFooNum(i:Number) {
    fooNum = i;
    my_xml.load("foo"+fooNum+".xml");
};
0 голосов
/ 20 сентября 2009

Этот урок на сайте kirupa может помочь вам.

http://www.kirupa.com/web/xml/index.htm

Объясняет, как работать с AS и XML. Надеюсь, это поможет вам получить ответ.

0 голосов
/ 28 октября 2008

Ваша функция каждый раз создает новый экземпляр XML, и в результате вам также потребуется каждый раз определять функцию onLoad. Если вы повторно используете один и тот же экземпляр XML, вам не нужно будет повторно определять функцию например,

var iFooNum:Number;
var oXML:XML = new XML();

oXML.onLoad = function (success:Boolean) {
  if(success) {
    //Do Something with XML.
  }
}

loadFooNum = function(i:Number) {
  iFooNum = i;
  oXML.load("foo" + i + ".xml");
}

Если вы загружаете файл XML из другого домена, вам потребуется файл crossdomain.xml в другом домене, чтобы позволить флэш-памяти загрузить файл XML.

...