| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer User Registriert seit: Dec 2004
Beiträge: 5
|
Hallo, ich habe ein Problem innerhalb eines größeren Projekts, bei dem (Sub)SWFs per MovieClipLoader in eine (Haupt)SWF eingeladen werden. Das funktioniert soweit auch. Jetzt soll im SubSWF eine Funktion "init" aufgerufen werden, die im ersten Frame des SubSWFs definiert wird. Das Konstrukt sieht also etwa so aus: Code: var mcl:MovieClipLoader = new MovieClipLoader();
var mclisten:Object = new Object();
mclisten.onLoadInit = function(pClip) {
mcldone(pClip);
}
...
mcldone = function(pClip) {
...
func = pClip[elements[0]]; // elements[0] = 'init'
func.apply(pClip, args); // args wird irgendwo erzeugt
...
}
mcl.loadClip(...); Ein Trace zeigt, dass func = _level0.box2.content[init] (so die Hierarchie des MCs) beim ersten Mal undefined ist und beim zweiten Mal vom Typ Function ist... Hat jemand eine Idee? |
| | |
| | #2 (permalink) |
| ChronoGuard Registriert seit: Mar 2002 Ort: Saarbrücken
Beiträge: 2.652
|
Schreibst du so: PHP-Code:
__________________ we will stop enhancing the truth in 3, 2, ... |
| | |
| | #3 (permalink) |
| Neuer User Registriert seit: Dec 2004
Beiträge: 5
|
Danke für Deine Antwort, Weidler... hat aber leider nichts gebracht. Das Problem ist auch nicht, dass die Funktion mcldone nicht aufgerufen wird, sondern die Zeile PHP-Code: In Kürze also: Code: - In pClip wird per MovieClipLoader eine SWF geladen.
- Im onLoadInit-Event wird versucht mit
pClip[functionName].apply
eine Funktion im ersten Frame der SWF anzusprechen.
- Dies funktioniert in der Regel, aber nicht beim allerersten Aufruf
- woran liegt's? |
| | |
| | #4 (permalink) |
| ChronoGuard Registriert seit: Mar 2002 Ort: Saarbrücken
Beiträge: 2.652
|
Hmm. Dann würde mir jetzt auch nichs schlaueres einfallen, als mit setInterval oder Ähnlichem in deine mcldone noch eine kurze Verzögerung einzubauen, falls das onLoadInit tatsächlich vor dem Durchlaufen des Scripts im ersten Frame des geladenen Films gefeuert wird. Ist aber seltsam, mir wäre das noch nie aufgefallen. Das in deinem Codeschnipsel das Listener-Objekt nicht der MovieClipLoader-Instanz zugeordnet wird, ist aber nur ein copy/paste-Fehler, oder? Kann eigentlich auch gar nicht anders sein, sonst würds ja gar nicht gehn.
__________________ we will stop enhancing the truth in 3, 2, ... |
| | |
| | #5 (permalink) |
| Neuer User Registriert seit: Dec 2004
Beiträge: 5
|
Finde ich auch sehr seltsam. Zumal das Problem (glaube ich) erst auftaucht, seit wir ein Flash-Banner eines anderen Unternehmens mit in die Animation eingebaut haben. Das wird ebenfalls als SWF eingeladen und verlangsamt die HauptSWF enorm. Ich hab's schonmal mit Interval probiert, aber vielleicht die Zeit zu kurz gewählt...
|
| | |
| | #7 (permalink) |
| Neuer User Registriert seit: Mar 2004
Beiträge: 8
|
Ich habe exakt das gleiche Problem, daß ein onLoadInit getriggert wird, ich aber eine im ersten Frame des nachgeladenen Clips definierte Funktion nicht aufrufen kann. Dies geschieht auch bei mir nur beim ersten mal. In meinem Fall habe ich jetzt die Antwort gefunden (glaub ich jedenfalls). Ich verwende nämlich eine Shared Library in den Clips, die ich nachlade und irgendwie muss das wohl die Ursache des Fehlers sein. Folgender Link ist zwar wie es aussieht keine Flash Experten Seite, aber dort hat jemand zumindest die gleiche Beobachtung gemacht: http://readlist.com/lists/chattyfig....s/2/14030.html "Another thing that might have an impact on the firing of onLoadInit is if a shared library is referenced by the swf. If I remember right, MovieClipLoader will load the swf but not its shared libraries. Thus there is an extended delay after loading in which the first frame cannot execute because it needs to load any items in a shared library (if referenced on that frame). I believe one of my coworkers noticed that in this case, onLoadInit occurs before the first frame executes as well. So beaware that the shared library thing can have a negative effect even if all swfs come from the same server and are the same version" Verwendest du evtl. auch eine Shared Library? Gruss Marcus |
| | |
| | #8 (permalink) |
| Neuer User Registriert seit: Dec 2004
Beiträge: 5
|
Argh, jetzt wo Du's sagst, fällt mir ein, dass das erste Auftauchen des Fehlers ungefährt mit Einführung der Shared-Library zusammen liegt. Also: Ja, ich verwende ebenfalls eine Shared-Library. Damn. Und nu? Hatte der Kollege auch einen Lösungsansatz? Wir haben uns jetzt für's erste so beholfen, dass die benötigte Funktion hard-coded aufgerufen wird. Eigentlich sollte die Funktion nach Parsen einer XML-Datei geladen werden, in der der Funktionsaufruf enthalten ist. Im weiteren Verlauf funktioniert das ja auch, nur eben beim ersten Mal nicht. Bringt es vielleicht was, wenn ich die Shared-Library im Main-Movie quasi "preloade" (durch Einbettung aber Nicht-Verwendung)? Muss ich mal ausprobieren, wenn ich ein bisschen Zeit habe. Ach ja, hab ganz vergessen Majo zu antworten: Ja, ich lade mehrere SWF in einer Schleife. Allerdings wird dabei ein Array sukzessive abgebaut und immer erst das onLoadInit des vorherigen SWF abgewartet, bevor der MCL mit einem neuen Auftrag gefüttert wird. Daran kann es also nicht liegen, zumal das onLoadInit ja auch gefeuert wird (laut Trace). Geändert von Eskayp (24-01-2008 um 06:46 Uhr) |
| | |
| | #9 (permalink) |
| Neuer User Registriert seit: Mar 2004
Beiträge: 8
|
Puh, da bin ich ja froh, daß es auch bei dir an der Shared Library liegt. Natürlich finde ich das Problem ansich mies aber so weiss man wenigstens, daß es damit zusammen hängt. Also ich habe mir jetzt so beholfen, daß ich bei onLoadInit eine andere Funktion aufrufe, die eine kurze Wartepause macht (durch Zählen eines Wertes onEnterFrame) und dann erst die Funktion aufrufe, die ich eigentlich bei onLoadInit ausführen wollte. Das funktioniert dann zwar, aber es ist natürlich eine ganz schmutzige Lösung Der eigentliche Wert des onLoadInit Events geht damit verloren und im Prinzip ist das wieder die Prozedur, die ich früher immer durchgezogen habe ![]() Bei mir geht das auch noch problemlos, da meine Anwendung nicht im Web liegt sondern 'ne Offline Anwendung ist.. da weiss man ja, daß die Shared Library auch fix geladen ist. Du könntest im ersten Frame ganz unten im Code eine Variable setzen und in deiner Pausen/Zählfunktion den Wert der Variable erfragen. So wüsstest du, wenn die Variable den erwarteten Wert hat, daß der Code des ersten Frames geladen wurde. Gaaanz reudiges Old School Coding ![]() Gruß Marcus |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |