Ik heb in ActionScript 3 iets gemaakt (dit is de eerste keer dat ik iets doe met flash en ActionScript).
Daarin zitten functies die ik vanuit Javascript wil aanroepen. Deze heb ik zo gemaakt:
Mijn swf zet ik op de pagina m.b.v. jQuery.media en SWFObject met de volgende code:
De <%=DateTime.Now.Ticks%> is van ASP.NET, daarmee zorg ik dat de swf niet uit de cache geladen wordt. Dit leg ik verderop uit.
Vervolgens gebruik ik dit om het flash object te maken/laden:
En ten slotte gebruik ik deze code om de ActionScript functie(s) aan te roepen:
Deze code werkt perfect in Firefox en Chrome. Het werkt niet goed in Internet Explorer. Ik heb dit allemaal op verschillende machine's getest. In Internet Explorer krijg ik steeds de volgende foutmelding:
Als ik dat vervolgens ga debuggen, zie ik dat de foutmelding voorkomt in het volgende stukje:
Deze code is niet door mij gemaakt. Na wat zoeken blijkt dat deze code toegevoegd wordt door flash zelf, om ActionScript aanroepen vanuit Javascript mogelijk te maken.
Toen ik weer op een andere pc ging testen, merkte ik dat mijn code opeens wel werkte. Echter, na een verversing van de pagina, werkte het opeens niet meer en kreeg weer ik dezelfde foutmelding als op de andere pc. Toen bedacht ik me dat het misschien iets met caching te maken heeft. Dat is dus de reden dat ik die timestamp had toegevoegd aan de src. Dit loste het probleem op voor die machine. Ik kon zoveel verversen als ik wilde, het bleef voortaan goed werken. Deze pc heeft Windows 7 met IE9.
Ik dacht dus dat het toen opgelost was, maar voor de zekerheid ging ik het op nog een andere pc testen met Windows Vista en IE8. Daar was het probleem nog steeds niet opgelost. Daarna ging ik ook weer op mijn ontwikkel-pc testen (ook met Windows 7 en IE9) en daarop kwam ook nog steeds het probleem voor.
Ik ben hier al bijna de hele week mee bezig en ik kom er maar niet uit. Ik heb verschillende dingen geprobeerd van wat ik had gevonden tijdens mijn zoektocht (zoals de jqeury.media functie pas later of juist eerder aanroepen, het resultaat van jquery.media (= het nieuwe flashobject) in een window variable zetten, en nog andere rare dingen die ik al niet meer weet).
Iemand die hier ervaringen mee heeft en mij kan helpen? Ik kom er echt niet meer uit, zeker omdat het probleem dus op één pc wel is opgelost en op anderen niet.
// Edit: Wat ik nog was vergeten te zeggen is dat ik ook heb geprobeerd om mijn swf te debuggen met remote debugging en de debug flash player, maar als ik een breakpoint zet in de functie die door Javascript wordt aangeroepen, dan komt de debugger daar nooit in.
Daarin zitten functies die ik vanuit Javascript wil aanroepen. Deze heb ik zo gemaakt:
Flash ActionScript:
1
2
3
4
5
6
| ExternalInterface.addCallback("functieNaam", functieNaam); function functieNaam():void { // Doe iets } |
Mijn swf zet ik op de pagina m.b.v. jQuery.media en SWFObject met de volgende code:
HTML:
1
| <div id="flash" href="flashbestand.swf?<%=DateTime.Now.Ticks%>"></div> |
De <%=DateTime.Now.Ticks%> is van ASP.NET, daarmee zorg ik dat de swf niet uit de cache geladen wordt. Dit leg ik verderop uit.
Vervolgens gebruik ik dit om het flash object te maken/laden:
JavaScript:
1
| $('#flash').media({ width: '100%', height: '100%', autoplay: true }); |
En ten slotte gebruik ik deze code om de ActionScript functie(s) aan te roepen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
| // Chrome and IE use children[0], but Firefox uses flashObject[0]. var flashObject = $("#flash"); var children = flashObject.children(); if (children && children.length > 0 && children[0].functieNaam) { children[0].functieNaam(); } else if (flashObject.length > 0 && flashObject[0].functieNaam) { flashObject[0].functieNaam(); } |
Deze code werkt perfect in Firefox en Chrome. Het werkt niet goed in Internet Explorer. Ik heb dit allemaal op verschillende machine's getest. In Internet Explorer krijg ik steeds de volgende foutmelding:
code:
1
2
| Line: 49 Error: Unspecified error. |
Als ik dat vervolgens ga debuggen, zie ik dat de foutmelding voorkomt in het volgende stukje:
JavaScript:
1
2
3
4
5
| function __flash__addCallback(instance, name) { instance[name] = function () { return eval(instance.CallFunction("<invoke name=\""+name+"\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments,0) + "</invoke>")); } } |
Deze code is niet door mij gemaakt. Na wat zoeken blijkt dat deze code toegevoegd wordt door flash zelf, om ActionScript aanroepen vanuit Javascript mogelijk te maken.
Toen ik weer op een andere pc ging testen, merkte ik dat mijn code opeens wel werkte. Echter, na een verversing van de pagina, werkte het opeens niet meer en kreeg weer ik dezelfde foutmelding als op de andere pc. Toen bedacht ik me dat het misschien iets met caching te maken heeft. Dat is dus de reden dat ik die timestamp had toegevoegd aan de src. Dit loste het probleem op voor die machine. Ik kon zoveel verversen als ik wilde, het bleef voortaan goed werken. Deze pc heeft Windows 7 met IE9.
Ik dacht dus dat het toen opgelost was, maar voor de zekerheid ging ik het op nog een andere pc testen met Windows Vista en IE8. Daar was het probleem nog steeds niet opgelost. Daarna ging ik ook weer op mijn ontwikkel-pc testen (ook met Windows 7 en IE9) en daarop kwam ook nog steeds het probleem voor.
Ik ben hier al bijna de hele week mee bezig en ik kom er maar niet uit. Ik heb verschillende dingen geprobeerd van wat ik had gevonden tijdens mijn zoektocht (zoals de jqeury.media functie pas later of juist eerder aanroepen, het resultaat van jquery.media (= het nieuwe flashobject) in een window variable zetten, en nog andere rare dingen die ik al niet meer weet).
Iemand die hier ervaringen mee heeft en mij kan helpen? Ik kom er echt niet meer uit, zeker omdat het probleem dus op één pc wel is opgelost en op anderen niet.
// Edit: Wat ik nog was vergeten te zeggen is dat ik ook heb geprobeerd om mijn swf te debuggen met remote debugging en de debug flash player, maar als ik een breakpoint zet in de functie die door Javascript wordt aangeroepen, dan komt de debugger daar nooit in.
[ Voor 3% gewijzigd door Walance op 06-04-2012 12:52 ]