Почему URLReqeusts не загружает мои файлы, когда я перемещаю их на веб-сервер? - PullRequest
0 голосов
/ 12 января 2012

Я искал лучший способ справиться с этой проблемой, может быть, это просто словоблудие, которое я использую, но я не могу найти ответ, который хочу.Я объясню, что я делаю, и, надеюсь, кто-то там сможет объяснить, как это сделать.

При разработке флэш-проекта на моей машине я могу использовать что-то вроде:

        var request:URLRequest = new URLRequest("images.xml"); 
        var loader:URLLoader = new URLLoader();
        loader.addEventListener(Event.COMPLETE, handleResult);
        loader.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);

        loader.load(request);

Пока файл images.xml находится в том же каталоге, что и .fla, он работает нормально.Однако, как только я перемещаю .swf, .xml и мои изображения в Интернет, все это уходит в пропасть..Swf больше не может найти файл .xml, и я знаю почему.Используя FlashBug я могу прочитать ошибку в консоли.

IOError: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://www.mydomain.com/images.xml"]

И есть проблема, когда я перемещаю свой .swf на свой веб-сервер, URLRequest добавляет мой домен к запросу.Поскольку файл просто находился в той же директории на моей машине, это не вызвало проблемы просто сказать «images.xml», но теперь, чтобы заставить его работать, я должен изменить его на «http://www.mydomain.com/flash/myproject/images.xml".

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

Я знаю, что это можно сделать, я видел проекты, которые делают это, я просто хотел бы знать, как они это сделали.

1 Ответ

5 голосов
/ 12 января 2012

Я хочу знать, есть ли способ заставить .swf просто продолжать посмотрите в каталоге, где он находится, чтобы найти нужные ему файлы.

Да, есть, вы можете использовать атрибут base объекта и встраивать теги.

По умолчанию относительные пути в ActionScript разрешаются относительно страницы, содержащей Flash, а не относительно файла swf, но атрибут base позволяет указать другой путь к каталогу, который используется для разрешения относительных путей.

Так что для вашего примера пути выше, это будет что-то вроде этого:

<param name="base" value="/flash/myproject/">

<embed base="/flash/myproject/" src="...

Или, если вы используете SwfObject для встраивания swf, вы можете указать base с помощью параметра attribute:

http://code.google.com/p/swfobject/wiki/documentation

Редактировать

Продолжение этого вопроса, хотя ответ уже принят, но, поскольку вы прокомментируете, что изначально хотели обработать его в ActionScript вместо HTML и для возможных будущих читателей:

Если по какой-то причине вы не хотите или не можете установить атрибут base в HTML, альтернативой в ActionScript является использование loaderInfo.url для получения URL-адреса swf, выберите каталог часть этого и использовать его в качестве пути для загрузки файлов, которые находятся рядом с SWF. Это код, скопированный из моего проекта, включая комментарии:

// URL to the directory (folder) the main swf file is loaded from.
// Can be used to load other files realtive to the swf (instead of realtive to the page, which is default).
// So swfDir will normaly be like "http://www.site.com/upload/somefolder/"
var swfDir:String = loaderInfo.url.substring(0, loaderInfo.url.lastIndexOf("/")+1);

И позже, когда вы захотите загрузить, например, файл XML, вы должны сделать:

var request:URLRequest = new URLRequest(swfDir + "images.xml");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...