
- •Оглавление
- •Вступление
- •Глава 1. Язык сценариев. ActionScript: начальные сведения
- •Проект 1: Прыгающий мяч (программная анимация)
- •1.1. Среда разработки ActionScript: настройка и приемы работы
- •1.1.1. Различие между стандартной и профессиональной версиями Flash
- •1.1.2. Панель Actions
- •1.1.3. Режим упрощенного ввода кода. Панель Behaviors
- •1.1.4. Как упростить создание кода на панели Actions
- •1.1.5. Типы сценариев
- •1.1.6. Централизация кода
- •1.1.7. Инструменты работы с кодом
- •1.1.8. Настройки стиля кода
- •1.1.9. Сохранение ActionScript-кода
- •1.1.10. Функция trace() и панель Output
- •1.1.11. Справочная информация
- •1.2. Синтаксис ActionScript
- •1.2.1. Пробельные символы
- •1.2.2. Завершение предложений
- •1.2.3. Чувствительность к регистру
- •1.2.4. Зарезервированные слова ActionScript
- •1.2.5. Принципы присвоения имен
- •1.2.6. Комментарии
- •1.3. Основные понятия
- •1.3.2. ActionScript как скриптовый язык Flash-плейера
- •1.3.3. Интерпретатор ActionScript. Flash-ассемблер
- •1.3.4. Символы и экземпляры символов
- •1.3.5. Переменные
- •1.3.6. Функции
- •1.3.7. Условные предложения
- •1.3.8. Циклы
- •1.3.9. Массивы
- •1.3.10. Объектная модель ActionScript
- •1.3.11. Свойства _root, _parent, Leveln и ключевое слово this
- •1.3.12. Области видимости кода
- •1.3.1. ЕСМА-262 как основа ActionScript
- •Глава 2. Типы данных
- •2.3. Математические функции и константы. Объект Math
- •2.3.1. Особенности реализации математических функций
- •2.3.2. Возведение в степень и вычисление квадратного корня
- •2.3.3. Экспонента и натуральный логарифм
- •2.3.5. Случайные числа
- •2.3.6. Округление до целого числа
- •2.3.7. Сравнение пары чисел
- •2.3.8. Тригонометрические функции
- •2.3.9. Математические константы
- •2.4. Строки (тип string)
- •2.4.1. Создание строк
- •2.4.2. Элементарные операции со строками
- •2.4.3. Класс String
- •2.4.4. Определение длины строки. Свойство lengths
- •2.4.5. Соединение строк. Метод concat()
- •2.4.6. Выделение символа строки по индексу. Метод charAt()
- •2.4.7. Поиск в строке. Методы indexOf() и lastIndexOff()
- •2.4.8. Извлечение подстроки. Методы substring(), substr(), slice()
- •2.4.9. Преобразование строк в массивы. Метод split()
- •2.4.12. Преобразование строк в идентификаторы. Функция eval()
- •2.4.13. Текстовые поля
- •2.5. Кодировка символов. Уникод во Flash
- •2.5.1. Немного истории
- •2.5.2. Поддержка уникода Flash-плейером
- •2.5.3. Поддержка уникода средой разработки
- •2.5.4. Добавление символов уникода
- •2.6. Логические величины (тип boolean)
- •2.6.1. Класс Boolean
- •2.7. Тип undefined
- •2.8. Тип null
- •2.9. Объекты (тип object)
- •2.9.1. Атрибуты свойств
- •2.9.2. Изменение атрибутов свойств. Функция ASSetPropFlags()
- •2.10. Клипы (тип movieclip)
- •2.11. Преобразование типов данных
- •2.11.1. Правила преобразования типов
- •2.11.2. Автоматическое преобразование типов
- •2.12. Строгая типизация в ActionScript
- •Проект 2: Калькулятор
- •2.1. Определение типа объекта данных
- •2.2. Числа (тип number)
- •2.2.1. Виды чисел в ActionScript
- •2.2.2. Особенности представления чисел
- •2.2.3. Операции с числами
- •2.2.4. Класс Number — методы и свойства
- •2.2.5. Преобразование строк в числа. Функции parseInt() и parseFloat()
- •Глава 3. Переменные
- •3.1. Создание переменных
- •3.2. Особенности типизации переменных
- •3.3. Локальные переменные функций
- •3.4. Глобальные переменные
- •3.5. Особенности операции присваивания
- •3.6. Есть ли переменные в ActionScript?
- •3.7. Удаление переменных
- •Проект 3: Пружинный маятник
- •Глава 4. Функции
- •4.1. Создание функций
- •4.2. Вызов функций
- •4.3. Предложение return
- •4.4. Рекурсия
- •4.5. Особенности цепочки областей видимости функций
- •4.6. Объект arguments
- •4.6.1. Формальные параметры и объект arguments
- •4.6.2. Свойства объекта arguments
- •4.7. Особенности передачи в функции составных объектов данных
- •4.8. Функции как объекты
- •4.8.1. Класс Function
- •4.8.2. Свойство prototype
- •4.8.3. Методы вызова функции
- •4.9. Функции на стадии выполнения. Объект активации
- •Проект 4: Крестики-нолики
- •Глава 5. Операторы
- •5.1. Виды операторов
- •5.2. Иерархия операций
- •5.3. Сочетательность операций
- •5.4. Арифметические операторы
- •5.5. Операторы присваивания
- •5.5.1. Оператор =
- •5.5.2. Операторы присваивания с модификацией
- •5.5.3. Инкрементирование и декрементирование
- •5.6. Операторы равенства и сравнения
- •5.6.1. Операторы равенства
- •5.6.2. Операторы сравнения
- •5.7. Логические операторы
- •5.8. Условный оператор (?:)
- •5.9. Служебные операторы
- •5.9.1. Инициализаторы литералов
- •5.9.2. Оператор группирования
- •5.9.3. Операторы доступа к свойствам
- •5.9.4. Оператор вызова функции
- •5.9.5. Оператор new
- •5.9.6. Оператор super
- •5.9.7. Оператор delete
- •5.9.8. Оператор typeof
- •5.9.9. Оператор instanceof
- •5.9.10. Оператор void
- •5.9.11. Оператор «запятая»
- •5.10. Поразрядные операторы
- •5.10.1. Логические поразрядные операторы
- •5.10.2. Операторы поразрядного сдвига
- •Проект 5: 3D-конструктор
- •Глава 6. Предложения
- •6.1. Блок предложений
- •6.2. Предложения var и function
- •6.3. Предложения выражений и пустые предложения
- •6.4. Предложение return
- •6.5. Предложение with
- •6.6. Условные предложения
- •6.6.1. Предложение if
- •6.6.2. Предложение switch
- •6.7. Циклы
- •6.7.1. Циклы с предусловием (while и do—while)
- •6.7.2. Цикл с параметром (for)
- •6.7.4. Предложения break и continue
- •6.7.5. Ограничение на время выполнения кода
- •6.7.6. Циклы события onEnterFrame и временной диаграммы
- •6.7.7. Циклический вызов функций. Функция setInterval()
- •Проект 6: Тетрис
- •Глава 7. Массивы (класс Array)
- •7.1. Создание массивов
- •7.2. Извлечение и переопределение элементов массива
- •7.3. Длина массива. Свойство length
- •7.4. Добавление элементов в массив
- •7.5. Удаление элементов массива
- •7.6. Слияние массивов
- •7.7. Выделение фрагмента массива
- •7.8. Инверсия массива
- •7.9. Сортировка массива
- •7.10. Преобразование массива в строку
- •7.11. Многомерные массивы
- •7.13. Особенности реализации массивов в ActionScript
- •Проект 7: Пиксельное табло
- •Глава 8. События
- •8.1. Модель событий Генератор—Листенеры
- •8.1.1. Обработчики событий
- •8.1.2. Листенеры
- •8.2. Событийные методы
- •8.3. Модель событий Flash 5
- •8.4. Обновление экрана при событиях
- •Проект 8: Создаем события сами
- •Глава 9. Объектно-ориентированное программирование
- •9.2.1. Объекты
- •9.2.2. Свойства
- •9.2.3. Методы
- •9.2.4. Классы
- •9.2.5. Наследование
- •9.2.6. Создание надклассов и подклассов
- •9.2.7. Концепция создания надклассов Flash 6
- •9.2.8. Оператор super
- •9.2.9. Свойства и методы конструктора класса
- •9.2.10. Определение принадлежности объекта к классу
- •9.2.11. Цепочка областей видимости. Объект Global
- •9.3. Класс Object
- •9.3.1. Создание объектов класса Object
- •9.3.2. Метод registerClass(). Выделение экземпляров клипа в класс
- •9.3.3. Метод addProperty(). Свойства типа getter/setter
- •9.3.4. Методы watch() и unwatch(). События изменений свойств
- •9.3.5. Прочие методы класса Object
- •9.4.1. Создание классов
- •9.4.2. Задание наследуемых свойств и методов класса
- •9.4.3. Конструктор класса. Инициализация собственных свойств и методов объектов
- •9.4.4. Особенности задания методов в AciionScript2.0
- •9.4.5. Статичные члены класса
- •9.4.7. Динамические классы
- •9.4.8. Наследование
- •9.4.9. Интерфейсы
- •9.4.10. Свойства типа getter/setter
- •9.4.11. Выделение экземпляров символа в подкласс
- •9.4.12. Особенности контроля на этапе компиляции
- •9.4.13. Особенности импорта внешних классов
- •9.4.14. Пакеты
- •9.4.15. Встроенные классы. Директива intrinsic
- •Проект 9: Модель идеального газа
- •Глава 10. Клипы
- •10.1. Глобальные функции и свойства
- •10.2. Отличия клипов от объектов
- •10.2.1. Свойства клипов
- •10.3. Клипы как носители кода
- •10.3.1. Последовательность выполнения кода
- •10.3.2. Особенности использования свойств и методов класса MovieClip
- •10.4. Особенности основной временной диаграммы _root
- •10.5. Создание экземпляров клипов
- •10.5.1. Метод duplicateMovieClip()
- •10.5.3. Метод createEmptyMovieClip(). Создание пустого клипа
- •10.6. Виртуальные слои клипов
- •10.6.1. Изменение глубины клипа. Метод swapDepths()
- •10.7. Импорт внешних фильмов и изображений
- •10.7.2. Импорт внешних фильмов при помощи функций loadMovie() и loadMovieNum()
- •10.7.3. Импорт изображений
- •10.7.4. Импорт фильмов и изображений при помощи класса MovieClipLoader
- •10.7.5. Создание предзагрузчиков
- •10.7.6. Кэширование swf-фильмов
- •10.7.7. Изменение глубины основной временной диаграммы
- •10.7.8. Доступ из одного фильма к объектам другого
- •10.7.9. Обобщенные библиотеки
- •10.8. Имена экземпляров клипов
- •10.9. Ссылки на клипы
- •10.9.1. Свойство _lockroot
- •10.9.2. Определение пути к клипу
- •10.9.3. Инструмент Insert Target Path
- •10.10. Система координат клипов
- •10.10.1. Свойство _x и _y
- •10.10.2. Пересчет координат из одной системы в другую
- •10.10.3. Масштаб осей
- •10.10.4. Размер клипа
- •10.10.5. Границы клипа
- •10.10.6. Поворот системы координат
- •10.11. Прозрачность и видимость клипа
- •10.11.1. Свойство _alpha
- •10.11.2. Свойство _visible
- •10.12. Перемещаемые клипы. Метод startDrag()
- •10.12.1. Свойство _droptarget
- •10.13. Коллизии клипов. Метод hitTest()
- •10.13.1. Определение пересечения двух клипов
- •10.13.2. Определение принадлежности точки к клипу
- •10.13.3. Определение коллизии клипов с использованием поточечного перебора
- •10.14. Управление временной диаграммой
- •10.14.1. Начало и остановка проигрывания клипа
- •10.14.2. Переход на новый кадр
- •10.14.3. Определение номера проигрываемого кадра
- •10.15. Программные маски
- •10.16. Удаление экземпляров клипов и фильмов
- •10.16.1. Удаление экземпляров. Метод removeMovieClip()
- •10.16.2. Выгрузка содержимого экземпляров. Метод unloadMovie()
- •10.16.3. Выгрузка фильмов
- •10.17. События
- •10.17.1. Создание обработчиков событий в стиле Flash 5
- •10.17.2. Событие смены кадров (onEnterFrame)
- •10.17.3. Событие загрузки клипа (onLoad)
- •10.17.4. Событие выгрузки клипа (onUnload)
- •10.17.5. Событие поступления данных (onData)
- •10.17.6. События мыши (onMouseDown, onMouseUp, onMouseMove)
- •10.17.7. События клавиатуры (onKeyDown, onKeyUp)
- •10.17.8. «Кнопочные» события
- •10.17.9. События фокуса (onSetFocus, onKillFocus)
- •10.18. Программное рисование
- •10.18.1. Рисование прямыми отрезками
- •10.18.2. Рисование фрагментами парабол
- •10.18.3. Однородная заливка
- •10.18.4. Градиентная заливка
- •10.18.5. Удаление программной графики
- •10.19. Управление цветом клипов. Класс Color
- •10.19.1. Цветовые модели
- •10.19.2. Задание формулы цвета
- •10.19.3. Задание цвета клипа. Метод setRGB()
- •10.19.4. Цветовые трансформации. Метод setTransform()
- •Проект 10: Рисование 3D-объектов
- •Глава 11. Кнопки
- •11.1. Создание кнопок
- •11.2. Сходства и различия кнопок и клипов
- •11.3. События кнопок
- •11.3.1. Особенности событий кнопок
- •11.3.2. События кнопок в стиле Flash 5
- •11.4. Режим элемента меню
- •11.5. Вид указателя мыши
- •11.6. Отключение кнопок
- •11.7. Управление кнопками при помощи клавиатуры
- •11.7.1. Динамическое наведение фокуса
- •11.7.2. Свойство _focusrect
- •11.7.3. События onSetFocus и onKillFocus
- •11.7.4. Задание маршрута клавиатурного обхода
- •11.7.5. Особенности клавиатурного обхода и программного фокуса в случае клипов
- •11.8. Клипы как кнопки
- •Проект 11: Факел
- •Глава 12. Работа с мышью и клавиатурой
- •12.1. Работа с мышью
- •12.1.1. Определение координат указателя мыши
- •12.1.2. События мыши
- •12.1.3. Скрытие указателя мыши
- •12.1.4. Правая клавиша мыши
- •12.1.5. Определение выхода указателя мыши за пределы окна плейера
- •12.2. Контекстное меню
- •12.2.1. Настройка контекстного меню. Класс ContextMenu
- •12.2.2. Введение в контекстное меню собственных команд
- •12.3. Работа с клавиатурой
- •12.3.1. Особенности событий клавиатуры
- •12.3.2. События onKeyDown и onKeyUp
- •12.3.3. Определение кода нажатой клавиши. Метод getCode()
- •12.3.4. Определение кода введенного символа. Метод getAscii()
- •12.3.5. Проверка нажатия клавиши. Метод isDown()
- •12.3.6. Проверка активности специальных режимов. Метод isToggled()
- •Проект 12: Эластики
- •Глава 13. Работа с текстом
- •13.1. Создание текстовых полей
- •13.1.1. Создание текстовых полей при помощи инструмента Text
- •13.1.2. Переменная поля
- •13.1.3. Динамическое создание текстовых полей
- •13.2. Удаление текстовых полей
- •13.3. Текстовые поля как визуальные объекты
- •13.4. Задание и извлечение текста поля
- •13.5. Настройка текстового поля
- •13.5.1. Управление размером поля
- •13.5.2. Рамка и задний фон
- •13.5.3. Поля однострочные и многострочные
- •13.5.4. Ограничение на количество символов
- •13.5.5. Поле паролей
- •13.5.6. Ограничение на вводимые символы
- •13.5.7. Выделение текста поля
- •13.6. Настройка стиля текста. Класс TextFormat
- •13.6.1. Задание гарнитуры
- •13.6.2. Размер шрифта
- •13.6.3. Цвет шрифта
- •13.6.4. Начертание шрифта
- •13.6.5. Выключка
- •13.6.6. Подчеркнутый шрифт
- •13.6.7. Гиперссылки
- •13.6.8. Форматирование текста
- •13.6.9. Определение размерных параметров текста
- •13.7. Работа со шрифтами
- •13.7.1. Шрифты системные и встроенные
- •13.7.2. Ненаправленные гарнитуры
- •13.7.3. Особенности встраивания шрифтов
- •13.7.4. Встраивание в фильм целого шрифта
- •13.7.5. Встраивание глифов отдельных символов и последовательностей символов
- •13.7.6. Проблема читабельности при отображении мелкого текста
- •13.8. Событие onChanged
- •13.9. Прокрутка текстовых полей
- •13.10. Работа с фокусом
- •13.11. Форматирование текста при помощи HTML
- •13.11.5. Тег <FONT> ... </FONT>
- •13.11.10. Тег <TEXTFORMAT> ... <TEXTFORMAT>
- •13.11.11. Тег <SPAN> ... </SPAN>
- •13.11.13. Автоматическое удаление пробелов. Свойство condenseWhite
- •13.12. Форматирование текста с использованием каскадных таблиц стиля (CSS)
- •13.12.1. Основные положения технологии CSS
- •13.12.2. Создание объекта таблиц стиля
- •13.12.3. Применение объекта стиля к текстовому полю
- •13.12.4. Элементы CSS, поддерживаемые Flash-плейером
- •13.13. Работа с выделением. Объект Selection
- •13.13.1. Управление фокусом поля. Методы getFocus() и setFocus()
- •13.13.2. Событие изменения фокуса (onSetFocus)
- •13.13.4. Определение и задание положения курсора ввода
- •13.13.5. Динамическое задание выделения. Метод setSelection()
- •13.13.6. Динамическая замена выделенного текста. Метод replaceSel()
- •13.14. Работа со статичным текстом. Объект TextSnapshot
- •13.14.1. Создание объектов класса TextSnapshot
- •13.14.2. Считывание текста статичных полей
- •13.14.3. Поиск строки в статичном тексте
- •13.14.4. Программное выделение статичного текста
- •13.14.5. Определение ближайшего к точке символа статичного текста
- •13.15. Копирование текста в буфер обмена
- •13.16. Поддержка многоязычности. Панель Strings
- •Проект 13: Текстовые эффекты
- •Глава 14. Время и дата
- •14.1. Основные понятия теории измерения времени
- •14.2. Компьютерное время
- •14.3. Класс Date
- •14.3.1. Создание объектов класса Date
- •14.3.2. Методы класса Date
- •14.4. Определение времени, прошедшего с начала проигрывания фильма
- •Проект 14: Программные часы
- •Глава 15. Работа со звуком
- •15.1. Основные понятия теории цифрового звука
- •15.1.1. Частота дискретизации
- •15.1.2. Разрядность выборок
- •15.1.3. Количество каналов
- •15.1.4. Алгоритмы компрессии
- •15.1.5. Форматы хранения
- •15.2. Событийный (event) и потоковый (stream) звук
- •15.3. Операции со звуком без использования программирования
- •15.4. Создание объектов класса Sound
- •15.5. Динамическое присоединение звука. Метод attachSound()
- •15.6. Импортирование внешних МР3-файлов
- •15.6.1. Метод loadSound()
- •15.6.2. Отслеживание окончания загрузки. Событие onLoad
- •15.6.3. Создание предзагрузчиков для импортируемых звуков
- •15.7. Управление воспроизведением звуков
- •15.7.1. Запуск воспроизведения. Метод start()
- •15.7.3. Событие onSoundComplete
- •15.8. Свойства position и duration
- •15.9. Управление параметрами воспроизведения
- •15.9.1. Громкость звука
- •15.9.2. Баланс
- •15.9.3. Детальное управление стереозвучанием. Метод setTransform()
- •15.10. Чтение ID3-тегов МР3-звуков
- •Проект 15: МР3-плейер
- •Глава 16. Взаимодействие с локальным окружением
- •16.1. Взаимодействие с импортированными фильмами
- •16.2. Взаимодействие с плейером
- •16.2.1. Определение версии и типа плейера
- •16.2.2. Режимы масштабирования
- •16.2.3. Типы выравнивания
- •16.2.4. Определение размеров фильма и величины окна плейера
- •16.2.5. Событие onResize
- •16.2.6. Цвет фона
- •16.2.7. Качество отображения
- •16.2.8. Панель небезопасных настроек плейера
- •16.3. Дополнительные возможности автономного плейера
- •16.3.1. Проекторы
- •16.3.2. Функция fscommandf()
- •16.4. Взаимодействие между фильмами, проигрываемыми разными плейерами
- •16.4.1. Создание кода отправки данных
- •16.4.2. Создание кода получения данных
- •16.4.3. Пример использования класса LocalConnection
- •16.5. Взаимодействие с браузером
- •16.5.1. Теги <EMBED> и <OBJECT>
- •16.5.2. Передача данных из HTML-окружения при загрузке фильма
- •16.5.3. Решение проблемы кнопок навигации браузера
- •16.5.4. Передача команд браузеру. Функция getURL()
- •16.5.5. Взаимодействие с JavaScript при помощи функции fscommand()
- •16.5.6. Управление SWF-фильмом посредством JavaScript
- •16.5.7. Определение наличия в системе Flash-плейера нужной версии
- •16.6. Взаимодействие со средой разработки
- •16.6.1. Настройка панели Actions
- •16.6.2. Объект CustomActions
- •16.6.3. Взаимодействие с JSFL
- •16.7. Взаимодействие со средствами чтения с экрана
- •16.8. Получение информации об использующемся аппаратном и программном обеспечении
- •16.9. Сохранение данных на диске
- •16.9.1. Создание объектов SharedObject
- •16.9.2. Чтение данных из объектов SharedObject
- •16.9.3. Удаление sol-файлов
- •16.9.4. Серверные объекты SharedObject
- •16.9.5. Решение проблемы выделения цветом посещенных ссылок
- •16.10. Взаимодействие с принтером
- •16.10.1. Функции печати
- •16.10.2. Класс PrintJob
- •Проект 16: Создаем свой инструмент
- •Глава 17. Обмен текстовыми данными с сервером
- •17.1. Принципы сетевой безопасности Flash MX 2004
- •17.1.1. Правила определения идентичности доменов
- •17.1.2. Требование идентичности протоколов
- •17.1.3. Снятие ограничений на доступ к содержимому фильма
- •17.1.4. Снятие ограничений на доступ к внешним данным
- •17.1.5. Преодоление ограничений для сокетов
- •17.1.6. Создание приложений, отвечающих принципам безопасности
- •17.2. Загрузка текстовых данных с сервера
- •17.2.1. Создание файла сданными
- •17.2.2. Функция loadVariables()
- •17.2.3. Класс LoadVars
- •17.3. Взаимодействие с серверным скриптом
- •17.3.1. Запрос с выводом результата в браузере
- •17.3.2. Запрос с отправкой результата в фильм
- •17.3.3. Задание заголовков запроса
- •17.4. Работа с сокетами
- •17.4.1. Класс XMLSocket
- •17.4.2. Создание сокета-сервера
- •17.5. Работа с XML
- •17.5.1. Введение в ХМL
- •17.5.2. Объектная модель XML. DOM
- •17.5.3. Преобразование XML-текста в дерево объектов DOM
- •17.5.4. Обход дерева DOM
- •17.5.5. Создание и модификация XML-документа
- •17.5.6. Обмен XML-данными с сервером
- •Проект 17: Создаем сетевую игру
- •Дополнительные главы
- •Глава 18. Обмен с сервером сложными данными
- •Глава 19. Компоненты
- •Глава 20. Полезные мелочи
сайты, тесно интегрированные с браузером. Flash-сайт, в котором имеется возможность навигации при помоши кнопок Назад (Back) и Вперед (Forward), для пользователя куда более удобен, чем тот, где такой возможности нет. Поэтому использование якорей кадров — это верный признак того, что сайт создавал профессиональный и ответственный разработчик.
16.5.4. Передача команд браузеру. Функция getURL()
Функция getURL() — одна из наиболее давно разработанных и, несмотря на это, важных для практики функций ActionScript. Она начала поддерживаться еще во Flash 2, то есть задолго до того, как в оборот был введен сам термин «ActionScript». Во Flash 5 у нее появился дублирующий метод класса MovieClip. Функция getURL() служит для решения довольно большого количества задач, которые можно охарактеризовать как «взаимодействие с локальным окружением». Она позволяет отправлять команды браузеру, фильму Macromedia Director, операционной системе — в общем средам, которые окружают плейер, воспроизводящий фильм (в англоязычной литературе такие среды принято называть host environment). Однако для практики интерес представляют прежде всего возможности getURL() no взаимодействию с браузером. При помощи данной функции можно открыть новую HTML-страницу, отправить вызов программе электронной почты, скачать удаленный файл, задействовать любую команду JavaScript или VBScript, т. е. решить любую задачу, доступную браузеру.
В наиболее общем случае синтаксис функции getURL() следующий:
getURL("URL");
Здесь url — некая ссылка, представленная в формате, который принят в Сети для задания URL. Ее общий синтаксис: «scheme:scheme_specific_part», где:
•scheme (схема) - описывает тип взаимодействия с внешней системой, особенности которого детализируются в части scheme_specific_part URL. Это может быть некий реальный протокол
(hup, ftp, https) или псевдопротокол (javascript, mailto, file, asfunction). Ссылки с псевдопротоко-
лами (их еще называют псевдонимами URL) предназначены для непосредственного управления системами локального окружения и не приводят к импорту данных извне (например, псевдопротокол javascript позволяет отправить браузеру команду JavaScript). Ссылка с протоколом вызовет импорт некоторых внешних данных (обычно это HTML-страницы);
•scheme_specific_part - часть URL, настолько специфичная для каждого типа взаимодействия, что однозначно ее определить невозможно. Это может быть адрес документа или файла (http, ftp), код JavaScript (javascript), имя функции ActionScript (asfunction), адрес E-mail и информа-
ция для полей письма (mailto) и т. д.
У функции getURL() иногда может быть несколько параметров. Подробнее об этом поговорим, когда будем обсуждать соответствующие случаи.
Функция getURL() может использоваться и кодом фильма, проигрываемого в автономном плейере. При этом любая команда, связанная с взаимодействием с браузером, вызовет открытие его нового окна с последующим выполнением в нем этой команды.
В табл. 16.4 приведена краткая характеристика основных команд, поддерживаемых функцией get URL(). Те из них, которые представляют для практики наибольший интерес, будут рассмотрены нами более обстоятельно ниже.
|
|
Таблица 16.4 |
|
Команды, поддерживаемые функцией getURL() |
|
Протокол/ |
Пример ссылки |
Краткое описание |
псевдопро- |
|
|
токол |
|
|
http |
http://www.flasher.ru |
Загружает HTML-документ или другой файл посред- |
|
|
ством протокола HTTP |
https |
https : //mysite.ru/mov.swf |
Загружает удаленный файл посредством протокола |
|
|
HTTPS (HTTP с повышенным уровнем безопасно- |
|
|
сти) |
ftp |
ftp://server.com/file |
Загружает файл с FTP-сервера (ftp — простейший |
|
|
протокол передачи файлов) |
nntp |
nntp://news.com/comp/132 |
Вызывает статью телеконференции Usenet |
file |
file://C:\\book.doc |
Открывает файл на данной машине |
mailto |
mailto:diis_ignotis@tut.by |
Создаст шаблон нового письма в программе элек- |
|
|
тронной почты |
javascript |
javascript:alert("Привет"); |
Вызывает команду JavaScript |
vbscript |
vbscript:alert("Привет") |
Вызывает команду VBScript |
asfunction |
asfunction:func name |
Вызывает функцию в коде ActionScript (см. главу 13) |
event |
event: event_name |
Отправляет событие фильму Macromedia Director, |
|
|
спрайтом которого является данный SWF-фильм |
lingo |
lingo:command_name |
Вызывает команду Lingo (скриптовый язык |
|
|
Macromedia Director). Может быть использована, ес- |
|
|
ли SWF-фильм является спрайтом фильма Director |
getURM("print:", "this"); |
Распечатывает фильм. Использовалась во Flash 4, с |
|
|
|
появлением функций печати ActionScript считается |
|
|
устаревшей |
Все протоколы и псевдопротоколы, поддерживаемые функцией getURL(), могут быть использованы и при создании ссылок в тексте при помощи тега <А>. Например, при нажатии ссылки, создаваемой следующим кодом, появится информационная панель браузера со строкой «Привет»:
this.createTextField("pole",0,200,200,0,0);
pole.border=pole.html=pole.autoSize=true;
pale.htmlText="Щeлкнитe по этой <B><A HREF='javascript:alert (\"Привет\")'> ссылке </A></B>";
Подробно особенности использования тега <А> описаны в главе J3.
Загрузка HTML-страницы
Основа Всемирной паутины — гиперссылки. Именно они связывают Сеть в единое целое, без них она бы представляла собой просто огромный архив неотсортированных документов. Вряд ли можно найти сайт, на котором не было бы хотя бы одной гиперссылки. Главная задача, для решения которой применяется функция getURL(), связана с реализацией разнообразных гиперссылок. Простейший случай — это баннер, при щелчке по которому должна быть открыта определенная страница.
Если необходимо открыть новую HTML-страницу, то функцию getURL() следует использовать в следующей форме:
getURL("URL", window);
где:
• "url" — строка с абсолютной или относительной ссылкой на НТМ L-документ. Для его доставки может быть использован как протокол http, так и https. Указывать протокол обязательно
(в браузере по умолчанию применяется http, поэтому если URL вводится в адресную строку, можно не прописывать протокол);
• window — необязательный параметр, определяющий, где именно будет отображена загружаемая HTML-страница. Возможны следующие варианты window:
o_blank — документ будет открыт в новом окне браузера. Характеристики этого окна будут соответствовать настройкам по умолчанию. Как открыть документ в окне с определенными свойствами, покажем чуть ниже, когда изучим взаимодействие SWFфильма с JavaScript. Например:
getURL("http://wnk.biz", _blank);
o_self — документ будет открыт в том же окне или фрейме, где располагается HTMLстраница с фильмом. Значение по умолчанию;
o _parent — загружаемый документ заместит содержимое всех фреймов того же уровня, что и фрейм, к которому относится HTML-страница с фильмом. Если фильм отображается в окне или фрейме верхнего уровня (а так обычно и бывает), то значения «_parent» и «_self» эквивалентны;
o _top — новая HTML-страница заместит собой все содержимое того окна браузера, к которому относится Flash-фильм, давший команду загрузить эту страницу. Если фильм принадлежит непосредственно окну, а не фрейму, то разницы между значениями window «_parent», «_self», «_top» не существует;
o name — новый документ будет загружен в окно или фрейм с именем «name». Если окна или фрейма с таким именем нет, то браузер откроет новое окно, присвоит ему имя «name» и загрузит целевой документ в него. Например:
getURL("http://wnk.biz","left -_frame");
Имя окна или фрейма не должно начинаться с символа «_», так как это атрибут специальных значений параметра window. Также следует учитывать,; что идентификаторы окон и фреймов чувствительны к регистру.
Обычно указывается имя конкретного окна или фрейма, если содержимое! в нем должно быть обновлено по некоторому событию (например, это может быть окно поиска по базе данных).
Адресовать НТМL-документ можно как абсолютной, так и относительной ссылкой. Относительные адреса более удобны, если документ хранится там же, где и фильм, давший команду на его загрузку. Однако использовать их нужно осторожно. Дело в том, что в разных браузерах относительные ссылки при преобразовании в полные адреса могут давать разный результат (часть браузеров в качестве базиса для относительных URL использует адрес HTML-страницы, в которую встроен фильм, другие же применяют адрес, с которого был получен SWF-файл). Чтобы этого избежать, необходимо явным образом прописать базис для относительных ссылок в параметр ре base тега <OBJECT> (или одноименном атрибуте тега <ЕМBED>). Особенно полезен данный параметр, если SWF-файл и HTML-документ, в который он встроен, относятся к разным доменам.
Например, если открываемые из фильма HTML-страницы хранятся по адресу www.mysite.server.ru/main, то параметр (атрибут) base следует задать так:
<param name="base" value="http://www.mysite.server.ru/main"/> (тег <OBJECT>) base=http://www.mysite.server.ru/main (тег <EMBED>)
В принципе, параметр (аргумент) base может принимать и относительные адреса! (они будут разрешаться исходя из URL страницы). Однако более надежно использовать абсолютные адреса.
Отправка данных серверу
Функция getURL() дает возможность отправить запрос удаленному приложению или серверному скрипту, Для этого используется следующий синтаксис:
getURL(location, window, method);
где
• location — абсолютный или относительный URL, адресующий необходимое приложение или скрипт
• window —параметр, определяющий, в каком окне или фрейме должен быть отображен результат обработки запроса серверным скриптом или удаленным приложением;
• method — метод передачи параметров. Flash поддерживает стандартные методы протокола HTTP, предназначенные для отправки данных на сервер: GET и POST. :
oМетод GET заключается в том, что строка с переменными присоединяется к URL, адресующему скрипт или приложение. При этом пары имя-значение разделяются при помощи амперсанта (&), а сама строка с переменными отделяется от основной части URL знаком «?». Количество данных, которые можно передать, используя метод GET, обычно ограничено 256-1024 байтами (в зависимости от настроек сервера). Если нужно переслать больший объем данных, то следует использовать метод POST. Пример URL типа GET:
http://www .mysite.ru/cgi-bin/search?book=ActionScript&author=Gurski
Когда сервер обрабатывает этот URL, вызывается приложение search, хранящееся в папке cgi-bin. и переменные, прописанные после знака «?», передаются ему в качестве параметров.
oМетод POST отличается от метода GET тем, что переменные пересылаются отдельным блоком, следующим за заголовком HTTP-запроса. В большинстве случаев методом POST можно заменить более простой, а следовательно, надежный метод GET, если на сервер следует передать большой объем данных. Но его нельзя использовать, если фильм проигрывается автономным плейером, если запрос отправляется Java-сер влету, а также если страница с фильмом отображается некоторыми браузерами (на-
пример, старыми Netscape Navigator).
Уфункции getURL() нет параметра, который был бы предназначен для передачи строки или массива с переменными, подлежащими пересылке на сервер. Данная функция попросту объединяет в строку все незащищенные для перечисления переменные данной временной диаграммы и отправляет ее на сервер. Если переменная хранит величину не строкового типа, то она приводится к типу
String. Например:
var a:String="ActicnScript", b:Object{}, с:Array=[1,2,3]; getURL("http://www.mysite.ru/cgi-bin/execute", "_blank", "GET"); /* Сервер получит следующий запрос:
http://www.mysite.ru/cgibin/execute?a=ActionScript&b=%5Bobject+Object%5D&c-1%2С2%2С3 */
Исходя из того, как функция getURL() формирует запрос, ее необходимо применять по отношению к клипу, специально созданному для хранения пересылаемых данных. Иначе на сервер помимо нужных будут отправлены и все остальные переменные временной диаграммы.
Функцию getURL() следует использовать, если результат работы серверного скрипта или удален-
ного приложения должен быть отображен в окне браузера. Если же он должен поступить в фильм, то необходимо применить функцию loadVariables() или класс LoadVars, о которых поговорим в следующей главе.
Обращение к локальному файлу
Используя псевдопротокол file, можно открыть практически любой файл накомпью-:ре пользователя. Например, следующий код открывает документ Microsoft Word:
getURL("file://С:\\docs\\text.doc");
Обратите внимание, что обратный слеш «\» в пути к файлу нужно обязательно экранировать парным слешем, так как в ActionScript данный символ служит для задания escapeпоследовательностей.
Определенные ограничения связаны с запуском исполнимых приложений посредством URL типа file. При этом появляется панель безопасности, на которой пользователь должен подтвердить или запретить активизацию ехе-файла. Поэтому если приложение является частью вашего проекта, то его лучше запускать командой «exec» функции fscommand().
URL типа file имеют довольно ограниченное использование. Иногда они применяются проекторами. Например, если вы создаете оболочку для компакт-диска с книгами в формате PDF, то реализовать ссылки или кнопки, открывающие каждую из них, позволяют именно URL типа file.
Вызов программы электронной почты
Довольно часто на сайтах встречаются ссылки, задействовав которые можно отправить E-mail администратору, владельцу или службе поддержки данного ресурса. Реализуются подобные ссылки посредством псевдопротокола mailto, который поддерживается и функцией getURL().
URL типа mailto имеет следующий стандартный синтаксис:
mailto:адрес?поля
где:
• адрес — обязательная часть URL, в которой должен быть указан ящик, на который следует отправить созданное письмо. Если письмо нужно разослать сразу по нескольким адресам, то их нужно отделить друг от друга запятыми;
• поля — необязательная часть IJRL, в которой прописывается информация для полей. Большинство программ электронной почты поддерживают три поля:
o subject — этому параметру соответствует поле темы письма;
o сс — при помощи данного параметра можно указать, куда должна быть отправлена копия письма;
obcc — параметр, задающий адрес E-mail, по которому должна быть отправлена скрытая копия письма.
Задавать значения для всех полей необязательно, но заполнять автоматически хотя бы поле subject — хороший тон по отношению к посетителям вашего ресурса.
Приведем примеры вызовов нескольких URL типа mailto:
getURL("mailto:diis_ignotis@tut-by"); getURL("mailto:diis_ignotis@tut.by,dct@omen.ru");
getURL("mailto;diis_ignotis@tut.by?subject=Привет&cc=dagi@tut.by&bcc=gurski@ tut.by");
При вызове URL типа mailto запускается программа электронной почты, которая используется в системе по умолчанию. Затем автоматически создается шаблон нового письма. Поля в этом шаблоне заполняются исходя из данных, прописанных в URL.
Взаимодействие с JavaScript
Возможность организовать взаимодействие между SWF-фильмом и JavaScript появилась еще во Flash 2 (то есть в 1996 году). Подобное взаимодействие может быть двухсторонним: как ActionScript может обращаться к методам и свойствам JavaScript, так и JavaScript может отправлять команды SWF-фильму. Сейчас мы обсудим только то, как посредством getURL() можно обращаться из Flash-фильма к браузерному скрипту. Остальные вопросы из области взаимодействия
JavaScript и ActionScript будут рассмотрены позже.
Если необходимо из кода ActionScript вызвать метод JavaScript или переопределить какое-то его свойство, то можно использовать функцию fscommand() или getURL(). Применение getURL() предпочтительнее, так как при этом, во-первых, не требуется создавать никаких специальных функций в коде HTML-страницы, а во-вторых, она работает в большом количестве браузеров. Однако об особенностях использования fscommand() также стоит иметь представление, поэтому взаимодействию с JavaScript при помогли этой функции посвящен п. 16.5.5.
Функция getURL() принимает команду, которую нужно передать JavaScript, в формате URL:
getURL(javascript:script);
где:
•javascript — псевдопротокол, указывающий браузеру, что в URL содержится код JavaScript;
•script — код JavaScript, который необходимо выполнить. В простейшем случае это может
быть просто вызов функции, набранной в теге <SCRIPT>. Однако столь же успешно можно вызвать и метод встроенного объекта или присвоить новое значение предопределенному свойству. Более того, в URL типа javascript может быть записан сколь угодно большой скрипт, содержащий неограниченное количество выражений любой сложности!
Приведем несколько простых примеров:
//Строка, выводящая панель сообщений, содержащую текст "Привет!" getURL("javascript:alert('Привет')");
//Строка, изменяющая отображаемый документ на сайт "Питера" getURL("javascript:window.location='http://www.piter.com'");
//Строка, создающая функцию, а затем выэывающая ее getURL("javascript:function func(par) {return par}; alert(func('Привет'));");
Если попытаться выполнить команду JavaScript в автономном плейере, то будет открыто новое окно браузера и команда будет передана в него.
Успешность взаимодействия SWF-фильма с JavaScript зависит от браузера. В ряде старых браузеров (например, Internet Explorer 4 для Macintosh) попытка дать команду JavaScript при помощи getURL() окажется неудачной. Однако во всех современных браузерах (старше четвертого поколения) взаимодействие между ActionScript и JavaScript возможно в полном объеме.
По умолчанию getURL() может обращаться к скрипту страницы лишь в том случае, если она была получена с того же поддомена, что и SWF-фильм. Обойти это ограничение можно, присвоив значение «always» специальному параметру allowscriptaccess тега <OBJECT> (или одноименному ат-
рибуту тега <EMBED>).
Даже если вы не владеете JavaScript, то вы сможете писать небольшие программы на этом языке, пользуясь одним лишь справочником. Дело в том, что в основе JavaScript и ActionScript лежит один стандарт— ЕСМА-262. Поэтому данные языки очень близки. У них один синтаксис, одни управляющие структуры, одна модель объектно-ориентированного программирования. Даже многие предопределенные классы и глобальные функции у JavaScript и ActionScript общие. Если использовать только те элементы языка, которые описаны в ЕСМА-262, то один и тот же код можно одинаково успешно выполнить как во Flash-плейере, так и в браузере.
Возможность взаимодействия с JavaScript чрезвычайно важна для практики. Используя се, можно столь тесно интегрировать браузер и Flash-сайт, что последний будет обладать всеми позитивными качествами HTML-страниц. JavaScript помогает преодолеть недостатки, связанные с тем, что Flash не является традиционной Web-технологией. К примеру, легко сделать так, чтобы при наведении указателя мыши на ссылку в строке состояния браузера отображалось, куда она ведет:
//Клип ban — это баннер дружественного ресурса
//Создаем функцию, которая будет выводить в строку состояния значение,
//переданное ей в качестве параметра
getURL ("javascript:function setStatus(par) {window.status=par;}");
//При пересечении указателем мыши границы баннера, ссылка на сайт должна
//быть отображена в строке состояния
ban.onRollOver=function():Void { getURL("javascript:setStatus('http://www.flasher.ru');");
};
//При выходе указателя за пределы баннера значение в строке состояния
//должно быть заменено на принятое по умолчанию ban.onRollOut=function():Void {
getURL("javascript:setStatus(window.defaultStatus);");
};
Закрыть окно браузера, в котором отображается проект, можно следующей строкой:
getURL("javascript:window.close();");
Если HTML-страница открывается getURL() напрямую, то невозможно произвольно задать характеристики окна браузера, в котором она будет отображена. Окно визуализируется исходя из установок, принятых по умолчанию. Иногда же бывает желательно, чтобы по размерам оно совпадало с встроенным в страницу SWF-фильмом, или чтобы его размеры нельзя было изменить, или же чтобы в нем не было строки меню (самый простой способ «победить» слабую согласованность Flash-сайта с браузером — это просто убрать меню с кнопками навигации и прочими «опасными» элементами). Решить все эти, а также многие другие задачи можно, открыв HTML-страницу посредством метода window.open() JavaScript. Для примера приведем код, открывающий HTMLстраницу в немасштабируемом окне 300 х 300 пикселей.
getURL("javascript:void window.open('http://www.flasher.ru', null, 'width=300, height=300, menubar, status')");
Если страница с фильмом отображается в Internet Explorer, то ее легко можно перевести в полноэкранный режим (это может быть полезно в случае игр и заставок):
getURL("javascript:void window.open('http://www.flasher.ru/forum', null, 'fullscreen')");
Возможности JavaScript по управлению окном браузера куда шире, чем аналогичные возможности ActionScript в отношении окна автономного плейера. В частности, размер окна браузера можно легко изменить. Следующий код при нажатии кнопки but увеличивает окно, в котором отображается документе фильмом, на 100 пикселей по горизонтали и на 50 по вертикали:
but.onRelease=function():Void { getURL("javascript:window.resizeBy(100, 50)");