我一直在使用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以来这个问题没有得到解决,我感到很惊讶!
答案 0 :(得分:2)
我不确定你在哪里遇到问题。外部接口和SWFObject在IE6 / 7/8中工作就好了。请参阅此example(示例的解释为here)
当你说'在表格中嵌入瑞士法郎'时,你到底想要做什么?如果你将swf嵌入到div中,那么div是一种形式还是身体其他任何地方都无关紧要。
对于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' on。 SWFObject API documentation涵盖了它的用法。
希望有所帮助
- 菲利普