Главное меню:



Satus — это простая CMS
Комментарии:
    25.12.11 18:13 Написал(а) Селиван (из города Северное)
Хороший блог, однако стоит больше добавлять информации
читать статью »
    10.12.11 16:52 Написал(а) Вася (из города Белгород)
хА. приколько
читать статью »
    29.11.11 13:35 Написал(а) Марианна (из города Кулебаки)
Есть моменты, когда все удается, не ужасайтесь - это пройдет.
читать статью »
    09.11.11 19:12 Написал(а) Капитон (из города Кадуй)
Да, действительно. Так бывает. Можем пообщаться на эту тему.
читать статью »

 
Связка ActionScript + JavaScript

Если вам вдруг понадобилось связать actionscript, выполняемый в среде flash, с javascript, то нет ничего проще.. это можно сделать как по примеру от самого adobe (смотрим здесь), так и по примеру указанному ниже.. но надо отметить, что пример от adobe adobe работает только в среде as 3.0, пример ниже работает как в as 2.0, так и в as 3.0.. функции вызова думаю не составит труда написать свои...

 

В теле html страницы прописываем слудующий код:

<head>
....
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">//<![CDATA[
  var flashvars = {};
  var params = {};
  var attributes = {};
  attributes.id = "flash1"; // идентификатор ролика
  swfobject.embedSWF("путь к ролику", "flashContent", "ширина", "высота", "10.0.0", false, flashvars, params, attributes);
//]]></script>


<script type="text/javascript">//<![CDATA[
var jsReady  = false,
    swfReady = false;

function jsGetReady(){
  return jsReady;
}
function jsSetReady(){
  jsReady  = true;
}
function swfSetReady(){
  swfReady = true;
}
function swfMovie(movieName){
  if(navigator.appName.indexOf("Microsoft") != -1)
    return window[movieName];
  return document[movieName];
}
function E(cc){
  return (typeof(cc)!='object')? document.getElementById(cc) : cc;
}

function ....(){
var obj = swfMovie("flash1");
 if(swfReady && obj){
   // если flash готов, вызываем функции action script
   obj.putAction(....);
 }
}

//]]></script>

</head>
<body onload="jsSetReady()">
....
<div id="flashContent">
  <!-- сюда будет помещен наш ролик -->
</div>
....

swfobject.js -- это скрипт для динамической вставки flash-роликов.. новую версию скачать можно здесь..

 

 

В теле же нашего ролика записываем следующий код:

import flash.external.*;
import flash.utils.*;
import flash.events.*;

var jsCheckReadyTimer:Number = 0;
if(ExternalInterface.available){
  try {
    if(jsGetReady()){
      initConnection();
    }else{
      jsCheckReadyTimer = setInterval(jsCheckReady, 100);
    }
  }catch(error:Error){
    trace("An error occurred: " + error.message);
  }
}else{
  trace("External interface is not available");
}

function jsGetReady():Boolean
{
  var result = ExternalInterface.call("jsGetReady");
  return result;
}

function jsCheckReady()
{
  if(jsGetReady()){
    clearInterval(jsCheckReadyTimer);
    initConnection();
  }
}

function initConnection()
{
  ExternalInterface.addCallback("putAction", null, getAction);
  ExternalInterface.call("swfSetReady");
}


function getAction(A:Number)
{
switch(A){
    case 1:
    break;
    ....
}
}

 

 

Итак, что происходит?.. когда браузер полностью загружает содержимое страницы и строит архитектуру dom, запускается событие  onload="jsSetReady()"  которое устанавливает, что javascript доступен для выполнения..

 

Ранее или позднее этого (в зависимости от самого браузера), запускается ролик и соответственно actionscript, записанный в нем.. он в свою очередь проверяет доступность модуля внешних связей ExternalInterface.available и проверяет доступность javascript'а посредством вызова функции ExternalInterface.call("jsGetReady")..

 

Если javascript доступен на момент запуска flash, то все происходит гладко: устанавливаются функции обратного вызова ExternalInterface.addCallback("putAction", null, getAction)  и javascript'у отправлдяется уведомление, что flash готов к работе  ExternalInterface.call("swfSetReady")...

 

Если же javascript еще не запущен, то запускается таймер setInterval(jsCheckReady, 100), который в цикле с периодом 100 мс проверяет наличие соежинения с javascript: ExternalInterface.call("jsGetReady"), как только соединение получено -- все происходит также как и написано выше..

 

Сожного в принципе нет ничего.. но нужно учитывать некоторые нюансы:

* динамическая вставка посредством swfobject успешно осуществляет запуск содержимого flash, исключая сбои при раннем или позднем исполнении javascript..

* контейнер для вставки flash-роликов (в нашем случае это: <div id="flashContent"></div>) должен обязательно быть видимым в структуре dom.. иначе возможнгы сбои в работе..

 

 

в остальных случаях все работает замечательно..

 

Комментариев к статье: 2..
    17.04.11 07:02 Написал(а) Авксентий (из города Омск)

Актуальность - вежливость темы. Хорошо, что выложили эту статью. Пишите еще.

    04.04.11 15:17 Написал(а) Иларион

Свистать всех наверх - оратор открыл Америку. Браво браво браво

[ Добавить ] комментарий
Поля с пометкой * обязательны для заполнения

*Ваше имя
  Ваш сайт  
  Ваш город
*Ваше сообщение

Код подтверждения
*Код с картинки   @
код на картинке содержит только цифры (0..9) и буквы англ. алфавита (A..Z)