Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Javascript chiama Actionscript 3.0

This is a discussion on Javascript chiama Actionscript 3.0 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Buenas dias ! Avete letto il tutorial Actionscript chiama Javascript ? In quel caso, Flash chiamava ( tramite la classe ExternalInterface ) una funzione ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  3 links from elsewhere to this Post. Click to view. #1 (permalink)  
Old 07-11-07, 06:53
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Javascript chiama Actionscript 3.0

Buenas dias !

Avete letto il tutorial Actionscript chiama Javascript ?
In quel caso, Flash chiamava ( tramite la classe ExternalInterface ) una funzione javascript per creare una popup in runtime.
Questo tutorial è la seconda parte e vedremo come fare vice versa, cioè sarà Javascript a chiamare Actionscript.
In sostanza ho un SWF, 2 bottoni html e 2 immagini. Tutto nello stesso file html.
Il tutorial dimostra come agire sull' SWF da 2 bottoni html esterni e da 2 immagini sempre esterne all' SWF.

Guarda l' esempio on-line cliccando il seguente link:
agire su un SWF da bottoni html esterni

Creo un FLA che salvo con nome ' main.fla '.
Al suo interno ho una MovieClip sullo stage con nome istanza clip_mc che ha una semplice animazione.

Creo la Document Class, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package 
{
    import flash.display.MovieClip;
    import flash.external.ExternalInterface;

    public class Main extends MovieClip
	{

        public function Main()
		{
			clip_mc.stop();
			stage.frameRate=31;
			
			ExternalInterface.addCallback("sendToActionScript",fromJS);
		}
		
        private function fromJS(value:String):void
		{
			if(value=='play')
				clip_mc.play();
			else
				clip_mc.stop();
        }
    }
}
Ora creo la pagina html che chiamo main.html e che contiene main.swf, 2 bottoni e 2 immagini.
Ecco il codice di main.html:
HTML Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Javascript chiama Actionscript</title>
<script language="JavaScript">
function thisMovie(movieName) {
         if (navigator.appName.indexOf("Microsoft") != -1) {
             return window[movieName];
         } else {
             return document[movieName];
         }
     }
     function sendToActionScript(value) {
         thisMovie("main").sendToActionScript(value);
     }
     function sendToJavaScript(value) {
         document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
     }
</script>
</head>

<body>
<div align="center">
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
             id="main" width="500" height="375"
             codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
    <param name="movie" value="main.swf" />
    <param name="quality" value="high" />
    <param name="bgcolor" value="#869ca7" />
    <param name="allowScriptAccess" value="sameDomain" />
    <embed src="main.swf" quality="high" bgcolor="#869ca7"
             width="500" height="375" name="main" align="middle"
             play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
             type="application/x-shockwave-flash"
             pluginspage="http://www.macromedia.com/go/getflashplayer">
    </embed>
  </object>
  
</div>
<form name="form1" onSubmit="return false;">
         <p align="center">
           <input type="button" value="play" onClick="sendToActionScript('play');" />
           
           
             <input type="button" value="stop" onClick="sendToActionScript('stop');" />
         </p>
         <p align="center"><a href="#"><img src="pic_2.jpg" width="280" height="187" onClick="sendToActionScript('play');"></a> <a href="#"><img src="pic_1.jpg" alt="" width="280" height="187" onClick="sendToActionScript('stop');" /></a></p>
</form>
 </body>
</html>
Analizziamo il codice Actionscript

Importo le classi che mi occorrono
import flash.display.MovieClip;
import flash.external.ExternalInterface;

Funzione Costruttrice
fermo clip_mc
clip_mc.stop();
imposto una velocità di frame rate
stage.frameRate=31;
Chiamo il metodo statico addCallback della classe ExternalInterface. Questo metodo registra una funzione Actionscript come chiamabile dal contenitore dell' SWF. Il contenitore dell' SWF è main.html. Quindi in sostanza permette a Javascript di poter accedere a tale funzione.
Come specificare quale funzione deve essere accessibile dal contenitore ?
Seplice, passando al metodo addCallback 2 parametri: il primo è il nome della funzione Javascript che dal contenitore chiamerà Actionscipt. Il secondo è il nome della funzione Actionscript che viene chiamata.
Quindi in questo caso nel file main.html abbiamo una funzione Javascript con nome sendToActionscript e una funzione Actionscript con nome fromJS.
ExternalInterface.addCallback("sendToActionScript",fromJS);

Metodi
fromJS(value:String):void
conrollo il valore passato da Javascript ( che è una stringa ). Se il valore è 'play', allora mando in play clip_mc altrimenti se il valore è 'stop' fermo clip_mc.
if(value=='play')
clip_mc.play();
else
clip_mc.stop();

Alla prossima !
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 07-11-07, 10:01
Senior Member
 
Join Date: Jul 2007
Posts: 124
Rep Power: 2
nicodj88 is on a distinguished road
Riferimento: Javascript chiama Actionscript 3.0

grande flep!!! questo e veramente ottimo!!
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 07-11-07, 14:13
hard_overclocker's Avatar
Moderator
 
Join Date: Jul 2007
Posts: 51
Rep Power: 2
hard_overclocker is on a distinguished road
Re: Javascript chiama Actionscript 3.0

Hi there, don't mean to intrude.
Flep, I have a question: are all the tutorials getting translated to english ?
Sometimes I see cool stuff here that I don't see in the english section.

Just asking
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #4 (permalink)  
Old 07-11-07, 14:18
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Javascript chiama Actionscript 3.0

hehe
english section is 10 days behind cos i need the time to translate
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 07-11-07, 15:14
zizzolo's Avatar
Senior Member
 
Join Date: Sep 2007
Posts: 109
Rep Power: 2
zizzolo is on a distinguished road
Re: Javascript chiama Actionscript 3.0

:-)
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Flash Multi Gallery
  #6 (permalink)  
Old 21-07-08, 10:41
Junior Member
 
Join Date: Jul 2008
Posts: 3
Rep Power: 0
lilly is on a distinguished road
Riferimento: Javascript chiama Actionscript 3.0

Ciao! ho letto il tuo tutorial su come passare dati da Action script a Javascript, io ho provato a fare come c'era scritto ma faccio qualche errore che non riesco a trovare..
Il codice action script che uso è il seguente:


Code:
stop();
 import flash.external.ExternalInterface;
//create the local Shared Object
myLocalSO = sharedobject.getLocal("contextData" );

//Populate the text field if the SO already contains a name
if (myLocalSO.data.longitude != null) {
	userName.text = myLocalSO.data.longitude;
	longitude.text = "Longitudine " + myLocalSO.data.longitude;
} 
//Populate the text fields if the SO does not contain a name
else {
	userName.text = "";
	longitude.text = "Attivare modulo sensing";
}

if (myLocalSO.data.latitude != null) {

	latitude.text = "Latitudine " + myLocalSO.data.latitude;
} 

// Handler for userName.onChanged
userName.onChanged = function() {
	myLocalSO.data.longitude = userName.text;
}

//Reset the data in the SO, and text fields
blueButton.onRelease = function () {
	trace (myLocalSO.objectName);
	myLocalSO.data.longitude = null;
	myLocalSO.data.counter = 2;
	userName.text = "";
	longitude.text = "This is your first visit.";
}

var coordinate=new Array();

function fromJS():Array {
		
			coordinate [0] = myLocalSO.data.longitude;
			coordinate [1] = myLocalSO.data.latitude;
			return coordinate;
        }

ExternalInterface.addCallback("sendToActionScript",fromJS);
Mentre nella pagina local_so.html uso il seguente codice:

HTML Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 

 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">


<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">


<head>


<title>SWFobject | pagina esempio</title>


<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

<script type='text/javascript'>


function thisMovie(movieName) {
   
      if (navigator.appName.indexOf("Microsoft") != -1) {
          
  		 return window[movieName];
         
	} else {
       
      		return document[movieName];
         
		}
   

  }


var coords = new Array();

var lat=0;

var long=0;



function sendToActionScript() {
 

   coords = thisMovie("local_so").sendToActionScript();
  
      
 
       if ((long!=coords[0])||(lat!=coors[1]))
       
 	new_location();
        

     }
 

    function new_location() {
    
         
document.getElementById("cord1").innerHTML="lat";
      
   document.getElementById("cord2").innerHTML="long";
     }
 
   

</script>

</head>

 

 <body>

  
  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
             id="local_so" width="500" height="375"
             codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
 
   <param name="movie" value="local_so.swf" />
    
<param name="quality" value="high" />
   
 <param name="bgcolor" value="#869ca7" />
    
<param name="allowScriptAccess" value="sameDomain" />
   
 <embed src="http://www.flepstudio.org/forum/articoli-e-tutorials/local_so.swf" quality="high" bgcolor="#869ca7"
             width="500" height="375" name="local_so" align="middle"
             play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
             type="application/x-shockwave-flash"
             pluginspage="http://www.macromedia.com/go/getflashplayer">
    </embed>
  </object>




   <div>
<script type='text/javascript'>
    sendToActionScript();
   </script></div>



<div id="cord1"></div>

<div id="cord2"></div>

 
 </body>

</html>
Qunado lancio la pagina con firefox, firebug mi rileva il seguente errore:


thisMovie("local_so").sendToActionScript is not a function
[Break on this error] coords = thisMovie("local_so").sendToActionScript();


Ho iniziato a fare qualcosa in flash solo da pochi giorni..magari il mio errore è una cosa banalissima magari qualche plug-in mancante...ma proprio non so cosa fare...

Qualcuno sa dirmi qualcosa?
Grazie

Last edited by Flep; 10-11-08 at 17:35..
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #7 (permalink)  
Old 29-10-08, 08:33
Junior Member
 
Join Date: Jan 2008
Posts: 18
Rep Power: 0
Nerlaleph is on a distinguished road
Send a message via MSN to Nerlaleph
Re: Javascript chiama Actionscript 3.0

Ciao a tutti, spero che qualcuno possa darmi qualche indicazione. Sto sclerando!!

Ho seguito il tutorial di Flep e .. non mi funziona! O meglio, funziona in IE, ma non in Firefox, perchè?
HELP ME PLEASE!!
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #8 (permalink)  
Old 06-11-08, 14:50
Member
 
Join Date: Jan 1970
Posts: 33
Rep Power: 0
loris.dassie is on a distinguished road
Re: Javascript chiama Actionscript 3.0

Ciao,
se il mio javascript, il mio html e l'swf stanno sullo stesso server non ho problemi con il callBack ma se l'swf sta su un server diverso dal file html non funziona più. Nella fattispecie (uso swfobject)
swfobject.embedSWF("http://engine.controlweb.me/flash/3041.versionadv.com/template.kreativo/3041/layout.swf", "flashcontent", "1000", "700", "9.0.0", "", flashvars, params, attributes);
mentre l'html sta su http://www. 3041.versionadv.com

Mi potete aiutare?
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #9 (permalink)  
Old 10-11-08, 17:36
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Javascript chiama Actionscript 3.0

Quote:
Originally Posted by Nerlaleph View Post
Ciao a tutti, spero che qualcuno possa darmi qualche indicazione. Sto sclerando!!

Ho seguito il tutorial di Flep e .. non mi funziona! O meglio, funziona in IE, ma non in Firefox, perchè?
HELP ME PLEASE!!
Mistero
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #10 (permalink)  
Old 10-11-08, 17:36
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Javascript chiama Actionscript 3.0

Quote:
Originally Posted by loris.dassie View Post
Ciao,
se il mio javascript, il mio html e l'swf stanno sullo stesso server non ho problemi con il callBack ma se l'swf sta su un server diverso dal file html non funziona più. Nella fattispecie (uso swfobject)
swfobject.embedSWF("http://engine.controlweb.me/flash/3041.versionadv.com/template.kreativo/3041/layout.swf", "flashcontent", "1000", "700", "9.0.0", "", flashvars, params, attributes);
mentre l'html sta su http://www. 3041.versionadv.com

Mi potete aiutare?
Devono stare nello stesso file, non credo proprio funzioni su due server diversi.
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Actionscript calls Javascript - ExternalInterface class of Flash CS3 Flep Tutorials 1 21-10-08 16:30
Actionscript chiama Javascript - classe ExternalInterface di Flash CS3 Flep Articoli e tutorials 5 18-10-08 19:49
Interazione actionscript 2.0 - Javascript Twincpu Actionscript 3.0 base 1 18-02-08 19:43
javascript in actionscript 3.0 markuspedro Actionscript 3.0 base 4 01-02-08 11:45
Javascript calls Actionscript Flep Tutorials 6 20-12-07 07:23


All times are GMT. The time now is 11:44.


Powered by vBulletin versione 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap


FlepStudio
by Filippo Lughi
P.IVA 03605860406