是否可以在IE6 +中使用swfobject 2+在表单中嵌入SWF?

时间:2009-07-01 01:30:13

标签: javascript flash internet-explorer dom swfobject

我一直在使用swfobject.embedSwf将动态加载的SWF嵌入到IE 6,7,8中的HTML表单中。

针对该问题提出的所有手动解决方法都涉及从窗口对象创建对Object DOM元素的引用。例如:

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

其中id是swf对象dom元素的id。在我的情况下,我无法将window[id]设置为swf对象id,因为它尚未创建!

导致javascript错误的swfobject中的行是:

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

当SWF电影设置其Javascript外部接口时,它会尝试访问窗口[id]。由于这不存在,它失败了。

如果我应用上面提到的解决方法并使用被embedSwf替换的DOM元素填充window[id],它仍然会失败,因为它试图在div DOM元素而不是对象DOM元素上调用Flash特定方法。 / p>

我发现自从Flash 8和IE6以来这个问题没有得到解决,我感到很惊讶!

1 个答案:

答案 0 :(得分:2)

我不确定你在哪里遇到问题。外部接口和SWFObject在IE6 / 7/8中工作就好了。请参阅此example(示例的解释为here

当你说'在表格中嵌入瑞士法郎'时,你到底想要做什么?如果你将swf嵌入到div中,那么div是一种形式还是身体其他任何地方都无关紧要。

这是example of a SWF in a form

对于window [id],这是一种弃用的方法,应该用document.getElementById(id)替换。许多旧的Flash教程/文档说在使用ExternalInterface时使用window [id],但是现在每个主要浏览器都支持W3C标准document.getElementbyId,这个建议是安全的。这包括IE6 / 7/8,Firefox,Safari / Webkit,Opera等。

就试图找到它之前存在的元素而言,这是一个时间问题。 SWFObject将SWF嵌入到domready / onload中,这意味着在加载SWF之前,不应该尝试调用ExternalInterface。您可以通过在domready函数中放置您正在编写的任何代码来执行此操作:

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

SWFObject 2.2有一个新的回调功能,可以在嵌入SWF后立即调用函数。 Bobby Van der Sluis有一个example you can 'view source' onSWFObject API documentation涵盖了它的用法。

希望有所帮助

- 菲利普