我最近一直试图实现一个Flash应用程序,在某些时候需要通过html嵌入。它看起来像>
<embed src=".." quality=".." ... and at some point FlashVars="&firstparam&secondparam..."
我要做的是实现一个下拉列表,当按下时更改FlashVars参数,以便应用程序显示不同的内容。我试过
document.getoElementByID().FlashVars="new parameters"
但它不起作用(它适用于高位默认参数,如src,height,width ......)
我还尝试使用javascript片段再次编写整个嵌入部分,但它也没有用。这是如何在JavaScript中完成的?我是这个领域的初学者,所以非常感谢任何帮助。
感谢。
答案 0 :(得分:1)
要了解您的代码无效的原因,您应该了解flashvars
参数以及它的工作方式。
Adobe谈到了here,例如:
HTML&lt; OBJECT&gt;的FlashVars参数标记在Web浏览器中加载时将变量发送到SWF文件的顶层。 &lt; OBJECT&gt; tag用于将SWF文件添加到HTML页面。 &lt; EMBED&gt; tag也可以使用,但是更老,现在已经过时了。
所以在这里我们可以理解,在加载SWF时会加载这些变量,这就是为什么即使你已经改变了flashvars
参数,也就是什么都没有,对此没有任何意义加载的SWF应该再次加载以应用它们(变量)。
所以要做到这一点,举个简单的例子:
HTML:
<div id='swf_container'>
<embed id='swf_object' src='swf.swf' flashvars='id=1' />
</div>
JavaScript:
// change the flashvars attribute
var swf_object = document.getElementById('swf_object');
swf_object.setAttribute('flashvars', 'id=2');
var swf_container = document.getElementById('swf_container');
var inner_html = swf_container.innerHTML;
// reload the swf object
swf_container.innerHTML = '';
swf_container.innerHTML = inner_html;
这种方式当然是有效的,但是每次我们需要它来重新加载SWF对象时,这可能不是一个好主意,这就是为什么我们有ExternalInterface
到在SWF和JavaScript之间进行通信。
因此,如果您可以访问ActionScript代码来创建SWF,则可以使用ExternalInterface
在SWF已加载时调用其中的任何功能。
为此,请举例:
ActionScript:
if(ExternalInterface.available)
{
// registers an AS function to be called from JS
ExternalInterface.addCallback('from_JS_to_AS', from_JS);
}
function from_JS(id:int) : void
{
// use the id sent by JS
}
JavaScript:
var swf_object = document.getElementById('swf_object');
swf_object.from_JS_to_AS(1234);
...不要忘记使用swfobject
来避免某些浏览器的兼容性,并确保在ActionScript端和JavaScript之间建立通信...
希望可以提供帮助。
答案 1 :(得分:0)
这样做:
$('embed') // targets the embed tag in the DOM
.attr("attribute-name","attribute-value");