Московский физико-технический институт
Опубликован: 23.12.2005 | Доступ: свободный | Студентов: 2868 / 252 | Оценка: 4.61 / 4.44 | Длительность: 27:18:00
ISBN: 978-5-9556-0051-2
Лекция 14:

Работа флэш-программ в Internet

Изменение текущей директории (атрибут BASE)

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

Это может привести к проблеме, связанной с тем, что флэш-ролик в таком случае будет считать "текущей директорией", точнее, точкой отсчета путей, именно каталог с html-файлом (а это, видимо, не то, что вы хотели получить). Результат - нужные файлы (например, модули runtime sharing, ini-файлы и пр.) не будут найдены.

Для таких целей (изменение точки отсчета путей во флэш-ролике) специально предназначен атрибут BASE у тегов <OBJECT> и <EMBED>. Его значением может быть:

  • путь (относительный или абсолютный), который будет считаться точкой отсчета путей во флэш-ролике;
  • специальное значение ' .'.

Если в качестве значения атрибута BASE указать " .", то точкой отсчета путей считается каталог, в котором лежит *.swf-файл с флэш-роликом. (Однако будьте осторожны, в некоторых случаях, точно определить которые довольно затруднительно, эта настройка действует не сразу - не с первого кадра. В таких случаях можно добавить дополнительную начальную сцену, чтобы "переждать неприятности".)

Скорее всего, вы хотите, чтобы точкой отсчета путей был каталог, в котором лежит *.swf-файл с флэш-роликом, а это можно сделать как первым, так и вторым способом. Какой из них использовать? Казалось бы, все равно. Но не совсем.

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

Прочитайте про проблему зацикленной загрузки runtime-shared символов из пункта "Возможные проблемы" раздела " Runtime sharing " из лекции, посвященной командной работе. Ключевым моментом здесь является то, что путь, указанный в BASE , влияет на некий эталонный путь, сравниваемый с путями, указанными в параметре URL области linkage свойств символа. Еще раз, если они не совпадут до символа (это сравнение происходит где-то в недрах флэш-плеера), то возникнет проблема зацикленной загрузки и утечки памяти.

Что делать? В общем случае, если у вас возникает указанная проблема, попробуйте понять, чему равен каждый из путей и как сделать, чтобы они совпали. Но приведем все же пример работающей конфигурации (которой мы пользовались в одном из проектов):

  1. используйте в параметре URL области linkage просто имя *.swf-файла.
  2. для всех платформ кроме "IE+MacOS+работа с локального диска" установите BASE = ".".
  3. для платформы "IE+MacOS+работа с локального диска" установите BASE="file:///<полный путь к *.swf-файлу>.

Динамическую генерацию BASE удобнее всего сделать путем генерации тегов <OBJECT> и <EMBED> с помощью JavaScript.