Относительные URL-адреса в ActionScript 3

У меня есть флеш-ролик с использованием ActionScript 3 с некоторыми кнопками, открывающими ссылки на новые страницы. Вот код, который у меня есть для перенаправления на новую страницу:

myButton.addEventListener(MouseEvent.CLICK, function(e:MounseEvent) {
    var request:URLRequest = new URLRequest('http://www.example.com/page2.html');
    navigateToURL(request, "_top");
});

Он отлично работает на моем производственном сервере с полным URL-адресом, включая домен, но когда я меняю его на это:

var request:URLRequest = new URLRequest('page2.html');

он больше не работает в производстве. Что мне здесь не хватает? Мне бы хотелось, чтобы в фильме не закодировался весь URL.


person Shabbyrobe    schedule 16.10.2009    source источник


Ответы (3)


URLRequests относятся к HTML-файлу, содержащему их (не имеет значения, где находится ваш SWF-файл), поэтому вы должны это учитывать. Существует необязательный атрибут EMBED / OBJECT, который вы можете установить, чтобы изменить это поведение, см. Здесь:

база -. или [базовый каталог] или [URL]. Задает базовый каталог или URL-адрес, используемый для разрешения всех операторов относительного пути в фильме Flash Player. Этот атрибут полезен, когда ваши фильмы Flash Player хранятся в другом каталоге, чем другие ваши файлы.

http://kb2.adobe.com/cps/127/tn_12701.html

РЕДАКТИРОВАТЬ: Кроме того, старайтесь избегать использования абсолютных URL-адресов для относительных файлов, так как вы можете получить ошибки песочницы, например, при загрузке Интернета без www. ...

person Cay    schedule 16.10.2009

Попробуйте использовать /page2.html

person Chris Gutierrez    schedule 16.10.2009

/page2.html должен работать нормально, как предложил Крис.

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

Там, где я работаю, у нас есть как минимум 4 или 5 различных сред между производственной, промежуточной и различными средами тестирования, и иногда необходимо настроить URL-адреса (например, если источник данных находится на этапе подготовки, а не в производстве).

Поэтому я бы сделал функцию высокого уровня, например

MakeURL ()

Который я бы скармливал строке базовой страницы, такой как "page2.html", а функция MakeURL анализировала бы префикс URL-адреса, такой как http://staging.site.com или http://alpha.site.com.

Таким образом, если бы мне пришлось, я мог быстро изменить каждую ссылку в приложении.

Теперь вам редко нужно помещать туда весь URL-адрес, если вы не работаете с несколькими и разнообразными средами. Обычно /page2.html будет работать, но иногда я использую эту функцию как средство защиты от сбоев.

person M. Ryan    schedule 16.10.2009
comment
Это всегда очень удобно ... В недавнем проекте я расширил идею добавления суфикса с номером версии (? V = 1.0.3) в среду тестирования и производства, чтобы избежать кеширования нежелательных файлов ... таким образом, каждый раз что-то изменилось в разумном файле (что могло что-то сломать, используя старые файлы), я бы изменил номер версии (как параметр основного swf), чтобы пользователь загрузил свежий набор всех файлов и кэшировал их до следующей итерации ядра . Очень пригодилось, особенно при проверке изменений клиентом :) - person Cay; 16.10.2009