2009-07-01 4 views
2

J'ai eu des problèmes sans fin incorporant un SWF chargé dynamiquement dans un formulaire HTML dans IE 6,7,8 en utilisant swfobject.embedSwf.Est-il possible d'intégrer un SWF dans un formulaire en utilisant swfobject 2+ dans IE6 +?

Toutes les solutions de contournement manuelles proposées pour le problème impliquent la création d'une référence à l'élément Object DOM à partir de l'objet window. Par exemple:

window[id] = document.getElementById(id); 

Où id est l'ID de l'élément swf dom. Dans mon cas, je ne peux pas mettre window[id] à l'identifiant de l'objet swf car il n'a pas encore été créé!

La ligne swfobject qui est à l'origine des erreurs javascript est:

el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>'; 

Comme le film SWF crée son interface externe Javascript, il tente d'accéder à la fenêtre [id]. Comme cela n'existe pas, il échoue. Si j'applique la solution de contournement mentionnée ci-dessus et remplis window[id] avec l'élément DOM qui est remplacé par embedSwf, il échoue encore car il essaie d'appeler des méthodes spécifiques Flash sur un élément DOM DOM plutôt qu'un élément DOM objet.

Je trouve incroyable que ce problème n'ait pas été résolu depuis Flash 8 et IE6!

Répondre

2

Je ne sais pas où vous avez un problème. ExternalInterface et SWFObject fonctionnent très bien dans IE6/7/8. Voir ce example (les explications pour l'exemple sont here)

lorsque vous dites «intégrer un swf dans un formulaire», qu'est-ce que vous essayez exactement de faire? Si vous incorporez le swf dans un div, cela ne devrait pas avoir d'importance si le div est dans une forme ou ailleurs dans le corps.

est ici un example of a SWF in a form

que pour fenêtre [id], qui est une approche dépréciée et devrait être remplacé par document.getElementById (id). beaucoup de vieux tutoriels Flash/documentation disent d'utiliser window [id] lorsque vous travaillez avec ExternalInterface, mais ce conseil est sûr d'ignorer maintenant que chaque navigateur majeur prend en charge la norme W3C document.getElementbyId. Cela inclut IE6/7/8, Firefox, Safari/Webkit, Opera, etc.

En ce qui concerne l'élément existant avant d'essayer de le trouver, c'est un problème de synchronisation. SWFObject incorpore le fichier SWF à domready/onload, ce qui signifie que vous ne devez pas essayer d'appeler ExternalInterface tant que le fichier SWF n'est pas chargé. Vous pouvez le faire en plaçant le code que vous écrivez dans une fonction domready:

swfobject.addDomLoadEvent(function(){ 
    //safe to execute code on your embedded SWF in here 
}); 

SWFObject 2.2 a une nouvelle fonctionnalité de rappel qui vous permet d'appeler une fonction dès que le fichier SWF a été intégré. Bobby Van der Sluis a un example you can 'view source' on. Le SWFObject API documentation couvre son utilisation.

espoir qui aide

--philip

Questions connexes