Блог от AS3Coder'a о JavaScript, HTML, CSS... и немного о Flash.

пятница, 5 февраля 2010 г.

Как добраться до переменных FlashVars в ActionScript 3.0

Что такое FlashVars?

FlashVars - это пользовательские переменные, доступные .swf-приложениям во время исполнения кода, значения которых выставляются вне приложения, при вставки на .html-странице.
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="100%" height="100%" align="middle">
 <param name="allowScriptAccess" value="sameDomain" />
 <param name="movie" value="main.swf" />
 <param name="quality" value="high" />
 <param name="bgcolor" value="#ffffff" />
 <param name="wmode" value="opaque">
 <param name="allowFullScreen" value="true" />
 <param name="scale" value="noscale" />
 <param name="flashvars" value="your_variable_name=your_variable_value"/>
 <embed scale="noscale" src="main.swf" flashvars="your_variable_name=your_variable_value"  allowFullScreen="true"quality="high" bgcolor="#ffffff" width="100%" height="100%" align="middle" wmode="opaque" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="https://www.macromedia.com/go/getflashplayer" />
</object>




Как добраться до значений FlashVars в ActionScript 3.0?

В ActionScript 2.0 эти переменных можно было найти в корневом клипе документа _root, и обратиться к ним можно было вот так: _root.["your_var_name"]

В Action Script 3.0 эти переменные остались там же - в корневом классе документа в специальном свойстве loaderInfo, класса flash.display.LoaderInfo, который отвечает за информацию загружаемого .swf-файла.

package 
{
  import flash.display.Sprite;
  import flash.events.Event;
  //
  public class Main extends Sprite 
  {
    public function Main():void 
    {
      trace(this.loaderInfo.parameters["your_variable_name"])
    }
  }
}
  
Смотрите также:

17 комментариев:

  1. Спасибо за полезную инофмацию.

    Вот только еще вопрос, почему много информации дублируется в коде, который вставляет файл .swf

    ОтветитьУдалить
  2. Дело в том что в разных браузерах используются разные отображения .swf-файлов. В InternetExplorer используется ActiveX компонент, в остальных PlugIn. Поэтому для одного пишется так, для другого по-другому. Если убрать тег <embed>, то флешка перестанет отображаться во всех браузерах, кроме InternetExplorer. Если убрать <param movie="main.swf">, то перестанет отображаться и в IE.

    ОтветитьУдалить
  3. Наверное лучше обращатья через stage, а название переменной можно писать просто через точку:
    stage.loaderInfo.parameters.your_variable_name

    ОтветитьУдалить
  4. Иногда в тестовых целях надо "имитировать" данные FlashVars: ведь когда Вы только разрабатываете, Вы запускаете в тестовом режиме (по умолчанию) только Ваш флэш, без всяких FlashVars.
    Есть два варианта:
    1. Во FlashDevelop в свойствах проекта для TestMovie выбрать Open Document -> bin/index.html - и в index.html вставить Ваши FlashVars.
    2. В Вашем приложении:
    var myparam:String = "";
    if (stage.loaderInfo.parameters.myparam == undefined)
    {
    myparam = "mytestvalue";

    }
    else
    {
    myparam = stage.loaderInfo.parameters.myparam;
    }

    ОтветитьУдалить
  5. elena,
    или проще и нагляднее:
    var _externalParameters:Object = stage.loaderInfo.parameters;
    var myparam:String = _externalParameters.myparam ? _externalParameters.myparam : "mytestvalue";

    ОтветитьУдалить
  6. и еще: Адоби строго рекомендует юзать библиотеку SWFObject, для вставки флэшек на страницу. Забудьте вы про embed и прочие танцы вокруг костра.

    ОтветитьУдалить
  7. Адоби только рекомендует, а прислушиваться или нет - дело личное. Пост не о том, как вставлять .swf-файл в html-страницу. За свою практику, я встречался с различными способами вставки, и возможно напишу об этом отдельный пост :)

    ОтветитьУдалить
  8. А если этот свф файл подгружен в другой то переменные флешварс он не может достать?

    ОтветитьУдалить
  9. А можете подсказать с таким вопросом:

    как быть, если значения переменных, передаваемых через FlashVars, содержат символ &?
    Я пробовал заменять его на & — но всё равно ролик не воспринимает его, а в переменную попадает обрезанное (до первого вхождения &) значение.

    Заранее спасибо :)

    ОтветитьУдалить
  10. Прежде чем передать значение, замените в нем символ & на другой (например на |), после того как получите его сделайте обратную замену.

    ОтветитьУдалить
  11. Спасибо за ответ.

    Я, собственно, так и поступил. Но всё же это костыль...

    ОтветитьУдалить
  12. Символ "&" пишем так "&"

    И попутно вопрос, прочитав все вышеизложенное, а также теорию возможности подгруженного матрешкой ролика с FlashVar и его подхвата...

    как првильно оформить код с таким SWF во FLA AS3, SWF который загрузиться в другой, со значениями в моем случае:
    flashvars - "showtext=1&showabout=1"

    Спасибо

    ОтветитьУдалить
  13. _root.["your_var_name"] - очепятка
    точка не нужна.
    _root["your_var_name"] - правильно

    ОтветитьУдалить
  14. Здравствуйте а как можно с помощью loaderInfo.parameters манипулировать кнопками или мувиками на сцене, к примеру я хочу скрыть часть контента который в мувике, через параметр в html, или же убрать некоторые кнопки в проекте, чтоб каждый раз не перекомпиливать проект, если возможно, дайте пожалуйста примерчик. Спасибо огромное

    ОтветитьУдалить
  15. Здравствуйте а как можно с помощью loaderInfo.parameters манипулировать кнопками или мувиками на сцене, к примеру я хочу скрыть часть контента который в мувике, через параметр в html, или же убрать некоторые кнопки в проекте, чтоб каждый раз не перекомпиливать проект, если возможно, дайте пожалуйста примерчик. Спасибо огромное

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например <b>, <i>, <a>

Поиск по блогу

Обо мне



Farid Shamsutdinov (AS3Coder)
Russia, Tatarstan, Kazan
as3coder@gmail.com

Подробнее...

Постоянные читатели

Рассылка

© 2014 Farid Shamsutdinov. При копировании материалов, ссылка на источник обязательна. Технологии Blogger.