Zurück   Flashforum > Alternative Technologien > JavaScript & jQuery

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 15-08-2011, 10:13   #1 (permalink)
Neuer User
 
Registriert seit: Jul 2009
Beiträge: 6
Datenübergabe JS -> Flash beim Laden einer Seite

Ich habe einen Flash-Audioplayer gebaut, der sich mittels ExternalInterface auch über HTML-Links steuern lässt. Funktioniert auch alles an sich, nur eine Sache ist "unzuverlässig" und daher noch keine dauerhafte Lösung.

Beim starten der Seite sollen direkt Werte an Flash übergeben werden. Das passiert über eine JavaScript-Funktion, die dann eben per ExternalInterface.addCallback eine Initialisierungs-Funktion im Actionscript auslöst. Diese "Startfunktion" hatte ich erst einfach mittels onload im HTML-Body gestartet:
Code:
<body onload="startfunktion()">
Ich hatte das erst nur im Firefox probiert, da klappte das auch eigentlich wie gewünscht. Im Chrome dagegen war das mehr Glückssache, da ging es eher nur bei jedem zweiten oder dritten Seiten-Refresh. Dann probierte ich es statt mit dem Body-Tag per window.onload im Header, was ja auch flexibler ist. Aber technisch passiert da ja das gleiche, also ändert das am Problem nichts.

Beim googlen nach alternativen Lösungen gibt es viele Treffer mit diversen Ideen, offenbar haben viele ähnliche Probleme. Ich habe auch einige probiert, aber entweder sie funktionierten gar nicht (also noch nicht mal eine alert-Ausgabe zu Testzwecken), oder zumindest klappte die Übergabe nach Flash gar nicht mehr. Oder es war genauso wie beim normalen onload.

Hat jemand schonmal ähnliche Probleme gehabt und Ideen? Es geht ja offenbar darum, dass die Übergabe zum richtigen zeitpunkt passiert, und da die Javascript-Enginges der Browser unterschiedlich arbeiten, ist das wohl je nach Browser auch mal unterschiedlich. "Onload" wartet ja, bis alle Elemente der Seite geladen sind, was oft zu spät ist, und wohl auch mein problem ist. Aber bei manch anderer Lösung (z.B. per jquery-documentready) funktinierte es gar nicht mehr - passiert da dann die Übergabe zu spät, weil das SWF noch gar nicht geladen ist?

Ich habe das SFW übrigens per SWFObject eingefügt, also in der JS-Datei steht
Zitat:
var flashvars = {};
var params = { allowscriptaccess: "always"};
var params = { wmode: "transparent"};
swfobject.embedSWF("audio/audioplayer.swf", "flashContent", "400", "50", "9.0.0", "", flashvars, params );
und im HTML-Dokument steht an der Stelle, wo das SWF reinkommt nur:
Zitat:
<div id="flashContent" ></div>
wurz ist offline   Mit Zitat antworten
Alt 15-08-2011, 10:38   #2 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
was für eine Initialisierungs-Funktion? wieso übergibst du die benötigten Daten nicht per flashvars?
2. könntest du JS per ExternalInterface anweisen, jetzt zu initialisieren.
theoretisch sollte Flash dann in jedem Browser soweit sein.
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 15-08-2011, 11:03   #3 (permalink)
Neuer User
 
Registriert seit: Jul 2009
Beiträge: 6
Zitat:
was für eine Initialisierungs-Funktion? wieso übergibst du die benötigten Daten nicht per flashvars?
Hmm, jetzt wo du es sagst könnte es in meinem Fall auch reichen wirklich nur die Variablen zu übergeben. Allerdings geht es halt darum, dass ganze möglichst allgemein anlegen und übersichtlich verwalten zu können. Dieser Flash-Audioplayer erscheint auf mehreren Seiten und soll dort unterschiedliche Dinge abspielen, aber ich brauche quasi den Namen der jeweiligen Seite (als String), und die Liste der Tracks von dieser Seite (als String-Array). Das kann ich bisher recht schön machen, indem ich eine JS-Datei für die Seiten habe, auf denen der Audioplayer erscheint. In dieser steht zum einen diese SWFobject-intialisierung (aber eben nur einmal), und die Daten der einzelnen Seiten kann ich schön auflisten:
PHP-Code:
var seite1_tracklist = new Array('Titel1''Titel2''Titel3''Titel4');
var 
seite2_tracklist = new Array('Titel1''Titel2');
var 
seite3_tracklist = new Array('Titel1''Titel2''Titel3''Titel4''Titel5');

function 
seite1_startfunktion()
{
document.getElementById"flashContent" ).callMe("seite1"seite1_tracklist);
function 
seite2_startfunktion()
{
document.getElementById"flashContent" ).callMe("seite2"seite2_tracklist);
function 
seite3_startfunktion()
{
document.getElementById"flashContent" ).callMe("seite3"seite3_tracklist); 
Auf den jeweiligen HTML-Seiten muss ich dann nur die passende"seiteX_startfunktion" beim onload ausführen.

Für die Flashvars müsste ich dann mehrere SWFObjects.embedSWF auflisten. Naja, wäre auch nicht unbedingt aufwändiger.

Zitat:
2. könntest du JS per ExternalInterface anweisen, jetzt zu initialisieren.
Klingt auch interessant und logisch, werde ich mal probieren.

Danke für die schnelle Antwort!
wurz ist offline   Mit Zitat antworten
Alt 15-08-2011, 11:28   #4 (permalink)
Flash-Designer
 
Benutzerbild von Martin Kraft
 
Registriert seit: May 2006
Ort: Wiesbaden
Beiträge: 6.164
Kleine Anmerkung hierzu:
PHP-Code:
var params = { allowscriptaccess"always"};
var 
params = { wmode"transparent"}; 
Wenn Du die Variable zweimal deklariest, überscchreibst Du sie. Das sollte wohl eher so aussehen:
PHP-Code:
var params = {
  
allowscriptaccess"always",
  
wmode"transparent"
}; 
__________________
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 15-08-2011, 13:15   #5 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
um mal bei flashvars zu bleiben:
du könntest auf jeder Seite unterschiedliche Flashvars einbinden; in einem internen Script-Block(also keine externe JS-Datei).
statisch, oder auch per PHP
HTML-Code:
<script type="text/javascript">
	var flashvars = {
		pagename: "seite1",
		tracklist: "track1|track2|track3"
	};
</script>
oder
HTML-Code:
<script type="text/javascript">
var tracks = ["track1", "track2", "track3"];
var pagename = "seite1";

</script>
Code:
//und in deinem jetzigen Script:
var flashvars = {
	pagename: pagename,
	tracklist: tracks.join("|")
};
swfObject...
irgendwo oben, bevor deine externe JS-Datei geladen wird
oder du übergibst nur den Namen und lädst die Tracklist aus einer XML-Datei (erscheint mir irgendwie korrekter, ka)
__________________
greetz Thomas

plz RTFM & Coding Conventions
thomas_E ist offline   Mit Zitat antworten
Alt 15-08-2011, 22:04   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2005
Beiträge: 151
Hallo,
Zum onload-Problem: Füge dem onload ein setTimeout hinzu.

PHP-Code:
<body onload="setTimeout('startfunktionen()',1000)"
yaet ist offline   Mit Zitat antworten
Alt 15-08-2011, 22:26   #7 (permalink)
Keine Panik
 
Registriert seit: Apr 2010
Ort: Düsseldorf (im ernst)
Beiträge: 1.868
@yaet
und ich kann dir voraussagen, dass das bei mir ins leere führen wird. weil die swf uu. noch nicht bereit ist, und falls sie doch bereit wäre: ich nutz FlashBlock => erst nach nem Klick wird die SWF überhaupt geladen.
und ich glaub nicht dass ich da der einzige bin, bei dem das so wäre.

es ist in jedem fall sinvoller, das Flash sich die Daten holt, wenn es soweit ist. ob aus den flashvars, oder indem es den init per externalinterface selbst auslöst ist hierbei egal.
__________________
greetz Thomas

plz RTFM & Coding Conventions

Geändert von thomas_E (15-08-2011 um 22:33 Uhr)
thomas_E ist offline   Mit Zitat antworten
Antwort

Lesezeichen

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
beim laden einer seite variable an flash übergeben Karli98 ActionScript 1 10 02-05-2007 09:36
Script für laden einer swf datei, beim Starten der fla seite????? Domsi Flash MX 2004 2 05-10-2004 17:26
beim laden einer seite mit swf direkt zu frame springen? Master Luke HTML und CSS 2 20-02-2003 14:47
Flackern beim Laden einer Flash-Seite goiter-sepp Flash 4 und Flash 5 2 13-08-2001 10:13
Probleme beim Laden einer Flash-Seite im Internet-Explorer Peter Flash 4 und Flash 5 3 04-07-2001 19:29


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele