Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-01-2011, 09:26   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 13
Question ExternalInterface - addCallback Problem

Hallo..

Ich habe auf einer Webpage ein Flash-Video eingebunden.
Nun möchte ich mittels JavaScript eine AS2-Funktion aufrufen.
Jedoch wird die Funktion im AS nicht ausgeführt..

AS2 - Code
Code:
 import flash.external.*;     
 
if(ExternalInterface.available)
{
	externalTest.text = "ExternalInterface available!";
	ExternalInterface.addCallback("setBadge", setBadge);
	
}
else
{
	externalTest.text = "no ExternalInterface available";
} 

			
function setBadge(value:String)
{
	externalTest.text = "test aus funktion fromJS";
	externalTest.text = value;
}
HTML
HTML-Code:
<SCRIPT LANGUAGE="JavaScript"> 
		
// function for sending
function setBadge(index)
{   				
  var obj = thisMovie("Joy_editor_cs5");  					

  if (obj) 
  {
     obj.sendToFlash("123"); 							
  }   
}
		

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


</SCRIPT>

<div id="flashContent">
		
			<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="750" height="500" id="Joy_editor_cs5" name="Joy_editor_cs5" align="middle">
				<param name="movie" value="Joy_editor_cs5.swf" />
				<param name="quality" value="high" />
				<param name="bgcolor" value="#ffffff" />
				<param name="play" value="true" />
				<param name="loop" value="true" />
				<param name="wmode" value="window" />
				<param name="scale" value="showall" />
				<param name="menu" value="true" />
				<param name="devicefont" value="false" />
				<param name="salign" value="" />
				<param name="allowScriptAccess" value="always" />
				
				<param name="swliveconnect" value="true" />
				<!--[if !IE]>-->
				<object type="application/x-shockwave-flash" data="Joy_editor_cs5.swf" width="750" height="500" name="Joy_editor_cs5">
					<param name="movie" value="Joy_editor_cs5.swf" />
					<param name="quality" value="high" />
					<param name="bgcolor" value="#ffffff" />
					<param name="play" value="true" />
					<param name="loop" value="true" />
					<param name="wmode" value="window" />
					<param name="scale" value="showall" />
					<param name="menu" value="true" />
					<param name="devicefont" value="false" />
					<param name="salign" value="" />
					<param name="allowScriptAccess" value="always" />
					<param name="swliveconnect" value="true" />
				<!--<![endif]-->
			 		<a href="http://www.adobe.com/go/getflash">
						<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
					</a>
				<!--[if !IE]>-->

				</object>
				<!--<![endif]-->
		 	</object>
			<br>
		</div>
Wenn ich die JS-Funktion "setBadge()" aufrufe erhalte ich auf der Firebug-Flash-Konsole den Fehler:
"obj.sendToFlash is not a function
obj.sendToFlash("123"); "

ExternalInterface.available gibt mir immer "true" zrurück..

Was mus ich tun, damit Flash mein JS-Command annimmt?

Vielen Dank
JRoyal ist offline   Mit Zitat antworten
Alt 11-01-2011, 11:08   #2 (permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 434
Du registrierst ja deine Funktion als setBadge, folglich muss du auch obj.setBadge("123") aufrufen.
Lukas78 ist offline   Mit Zitat antworten
Alt 11-01-2011, 11:16   #3 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Außerdem sprichst IMHO Du den Flash-Film falsch an! Ich glaube nämlich nicht, dass der direkt in document oder window gespeichert ist, sondern über getElementById() o.ä. gesucht werden muss...
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 11-01-2011, 11:59   #4 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 13
Ok vielen Dank für die raschen Antworten..
Habe den Code angepasst.. jedoch ohne Erfolg
Erhalte noch den gleichen Fehler:
obj.setBadge is not a function
obj.setBadge("123");


Muss ich in der .fla noch bestimmte Einstellungen bei der Veröffentlichung vornehmen (momentan ist das meiste standart) ?
Habe den AS-Teil momentan auf dem 1 Frame des obersten Layers.. vieleicht spielt das noch eine Rolle..

angepasster Code:
HTML-Code:
obj = 	document.getElementById('Joy_editor_cs5');
if (obj) 
{				
    obj.setBadge("123"); 							
}  

Weiss nicht ob das eine Bedeutung hat, aber wenn ich testweise in der .fla einen call mache, erhalte ich auf der Firebug-Konsole:
missing ) after argument list
[Bei diesem Fehler anhalten] try { __flash__toXML(alert('hallo');()) ; } catch (e) { "<undefined/>"; }


AS:
Code:
 
ExternalInterface.call("alert('hallo');");

Geändert von JRoyal (11-01-2011 um 12:09 Uhr) Grund: Ergänzung
JRoyal ist offline   Mit Zitat antworten
Alt 11-01-2011, 12:21   #5 (permalink)
Neuer User
 
Registriert seit: Oct 2007
Beiträge: 434
Zitat:
Zitat von Martin Kraft Beitrag anzeigen
Außerdem sprichst IMHO Du den Flash-Film falsch an! Ich glaube nämlich nicht, dass der direkt in document oder window gespeichert ist, sondern über getElementById() o.ä. gesucht werden muss...
Versuchs mal hiermit:
Angehängte Dateien
Dateityp: zip detect_flash_player.zip (457 Bytes, 5x aufgerufen)
Lukas78 ist offline   Mit Zitat antworten
Alt 11-01-2011, 12:34   #6 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.162
Zitat:
Zitat von JRoyal Beitrag anzeigen
AS:
Code:
 
ExternalInterface.call("alert('hallo');");
Das kann ja auch nicht funktionieren. Schau mal in die Referenz:
Zitat:
public static function call(functionName:String, ... arguments):*
Also müsste es so lauten:
PHP-Code:
ExternalInterface.call("alert""hallo"); 
__________________
Viele Grüße // Martin

Martin Kraft // Interaktionsdesign

Hilfreiche Websites:
// Hilfe zur Adobe Flash Plattform
// ActionScript 2 Referenz
// ActionScript 3 Referenz
// ActionScript 3 Arbeitshandbuch
// weitere Flash Ressourcen

Bitte keine Flashfragen per PM oder Profilnachricht! Dafür ist das Forum da!
Martin Kraft ist gerade online   Mit Zitat antworten
Alt 11-01-2011, 14:25   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 13
Danke für die Tipps..
Leider war die Lösung nicht dabei..
Wenn ich das erhaltene JS debugge erhalte ich in der obj-variable:
[object#Joy_editor_cs5, object]
denke ds stimmt soweit..

Danke für die Korrketur der call() Methode.. habe diese angepasst und erhalte nun das Alert wenn ich das SWF im Browser lade
Also AS zu JS geht... nur mein eigentliches Problem JS -> AS2 funktioniert noch nicht

Sieht jemand noch einen Fehler in meinem Code oder kann mit Tipps geben?
Danke für die bisherigen Antworten.

JS + HTML
HTML-Code:
<SCRIPT LANGUAGE="JavaScript"> 

// function for sending
function setBadge(index)
{   				
	//var obj = thisMovie("Joy_editor_cs5");  
	//obj = 	document.getElementById('Joy_editor_cs5');
	var obj =  detectFlashPlayer("Joy_editor_cs5");
	
        if (obj) 
	{
            obj.setBadge("123"); 							
        }   
}
		

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


function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function detectFlashPlayer(playerName)
{
	var flashPlayer = MM_findObj(playerName);
	
	return flashPlayer;
}

<div id="flashContent">
		
			<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="750" height="500" id="Joy_editor_cs5" name="Joy_editor_cs5" align="middle">
				<param name="movie" value="Joy_editor_cs5.swf" />
				<param name="quality" value="high" />
				<param name="bgcolor" value="#ffffff" />
				<param name="play" value="true" />
				<param name="loop" value="true" />
				<param name="wmode" value="window" />
				<param name="scale" value="showall" />
				<param name="menu" value="true" />
				<param name="devicefont" value="false" />
				<param name="salign" value="" />
				<param name="allowScriptAccess" value="always" />
				
				<param name="swliveconnect" value="true" />
				<!--[if !IE]>-->
				<object type="application/x-shockwave-flash" data="Joy_editor_cs5.swf" width="750" height="500" name="Joy_editor_cs5">
					<param name="movie" value="Joy_editor_cs5.swf" />
					<param name="quality" value="high" />
					<param name="bgcolor" value="#ffffff" />
					<param name="play" value="true" />
					<param name="loop" value="true" />
					<param name="wmode" value="window" />
					<param name="scale" value="showall" />
					<param name="menu" value="true" />
					<param name="devicefont" value="false" />
					<param name="salign" value="" />
					<param name="allowScriptAccess" value="always" />
					<param name="swliveconnect" value="true" />
				<!--<![endif]-->
			 		<a href="http://www.adobe.com/go/getflash">
						<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
					</a>
				<!--[if !IE]>-->

				</object>
				<!--<![endif]-->
		 	</object>
</div>

<a href="#" ONCLICK="javascript:setBadge(0);" rel="imgtip[0]">
  <img src="lausanne.gif" alt="" class="thumbnail">
</a>
AS2:
Code:
 import flash.external.*;     
 
if(ExternalInterface.available)
{
	externalTest.text = "ExternalInterface available!";
	ExternalInterface.addCallback("setBadge", setBadge);
	
}
else
{
	externalTest.text = "no ExternalInterface available";
} 
ExternalInterface.call("alert", "hallo");  
externalTest.text="alert - hallo";
			
function setBadge(value:String)
{
	externalTest.text = "test aus funktion fromJS";
	externalTest.text = value;
}

Geändert von JRoyal (11-01-2011 um 15:55 Uhr) Grund: Update
JRoyal ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
addcallback, externalinterface, javascript

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Flash CS3] ExternalInterface.addCallback(..) Lengen1971 ActionScript 1 1 18-05-2009 12:48
Fehler bei ExternalInterface.addCallback neo14 ActionScript 2 4 02-04-2009 15:06
ExternalInterface.addCallback() Problem - Versteh nur nocht warum??? Knotschi ActionScript 3 0 14-03-2009 09:48
ExternalInterface.addCallback Problem alsodenn ActionScript 2 7 23-04-2008 07:06
ExternalInterface addCallback ergibt undefined FastEddie Flash 8 2 24-01-2007 19:24


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele