March 2008
M T W T F S S
    Apr »
 12
3456789
10111213141516
17181920212223
24252627282930
31  




Flash objektum vezérlése javascript-b?l

Felmerülhet az igény arra, hogy az általunk megírt flash-t kintr?l szeretnénk vezérelni. Ilyenkor a JavaScript jöhet számításba, mint böngész? script. Ez a cikk ezt próbálja meg bemutatni.

Egy saját flash-t fogunk irányítani. Letölthet? innen (test.swf):

http://www.gyurasits.hu/articles/controlswf/test.swf

Ha megvan a flash, hozzunk létre egy html file-t mellé. Ebbe fogunk programozni. A szokásos HTML tagokat állítsuk be, majd helyezzük el a flash objektumot a file-ban.

<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"WIDTH="200" HEIGHT="200" id="testmovie" ALIGN="">
  <PARAM NAME=movie VALUE="test.swf">
  <PARAM NAME=quality VALUE=medium>
  <PARAM NAME=bgcolor VALUE=#FFFFFF>
  <EMBED src="test.swf"
    quality=medium
    swliveconnect="true"
    bgcolor=#FFFFFF WIDTH="200" HEIGHT="200"
    name="testmovie"    ALIGN=""
    TYPE="application/x-shockwave-flash"
    PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
  </EMBED>
</OBJECT>

Ha kész, a html böngész?vel megnézve, már meg kell jelennie a flash-nek. Tegyünk egy apró linket a flash alá, ami majd meghívja a vezérl? függvényünket, és jelez ha lejárt a movie:

<p>
  <a href="javascript: playMovie();">Play movie...</a><br>
  <br>Status:
  <input type="text" value="" id="status" readonly>
</p>

Készítsük el a vezérlést.

El?ször kell egy JavaScript függvény, amivel megkapjuk a flash objektumot magát:

function getFlashMovieObject(movieName)  {
  if (window.document[movieName]) {
    return window.document[movieName];
  }
  if (navigator.appName.indexOf("Microsoft Internet")==-1) {
    if (document.embeds && document.embeds[movieName])
      return document.embeds[movieName];
  } else {
    return document.getElementById(movieName);
  }
}

Ez böngész? függetlenül szolgáltatja a paraméterben megadott nev? flash objektumot.

A vezérlés pedig a következ?:

function playMovie() {
  var flashMovie = getFlashMovieObject("testmovie");
  flashMovie.Play();
  document.getElementById("status").value="play..."
}

Lekérdezi a flash objektumot a “getFlashMovieObject” függvénnyel, majd egy egyszer? play hívást végez.

A flash tulajdonképpen egy nagyon egyszer? movie, amely egy “_root.stop() ;” szkriptel kez?dik, ezért már az els? frame-en megáll és ott várakozik. A JavaScript hívás indítja el, és mikor az újra az els? frame-re lép ismét megáll. Az utolsó frame tartalmaz egy JavaScript hívást amivel egy call back-et tudunk végrehajtani. Jelezve, hogy a movie lejárt.
A callback flash része, az utolsó frame-en (action script):

var jscommand:String = "callBack();";
getURL("javascript:" + jscommand + " void(0);");

és a JavaScript felöli oldalon pedig:

function callBack() {
   document.getElementById("status").value="Done!"
}

Ezzel készen is vagyunk.

A kész vezérlés megtekinthet? itt:

http://www.gyurasits.hu/articles/controlswf/controlflash.html

A callback-nél lehetnek security problémák, amik miatt nem m?ködik. A böngész?n állítsuk be, hogy a flash tudja hívni az oldalon lév? JavaScript kódot!

22 March 2008 | Uncategorized | Comments

2 Responses to “Flash objektum vezérlése javascript-b?l”

  1. 1 gabikah 1 August 2008 @ 09:49

    Szia!
    Szeretnék segítséget kérni a weblapom fejlesztéséhez…
    Egy swf gombot helyezek el egy bal frameben és azt szeretném elérni hogy a jobb frameben nyisson meg a gomb egy html fájl.
    Sokat olvastam utána fórumokon, de nem sikerült amegtalálni a megoldást az iframes problémára.
    Szóval azt szeretném megkérdezni, hogy ilyen komoly programozási tapasztalaattal tudnál-e esetleg segíteni nekem?
    Gab

  2. 2 GyZ 3 August 2008 @ 08:50

    Szia,

    A frame-ek a browser-ben hierarhikusan vannak felépítve. Vagyis a bal és a jobb frame-nek is gyanaz az ?se.
    Itt találsz egy kis leírást ezzel kapcsolatban:

    http://www.irt.org/articles/js015/index.htm

    A frame location tulajdonságát kell megváltoztatni…

    Ezt flash-b?l pedig a fenti meghívással lehet js-et hívni:

    var jscommand:String = “js kód”;
    getURL(“javascript:” + jscommand + ” void(0);”);

    Remélem tudtam segíteni… Üdv!

Comments:

You must be logged in to post a comment.