使用javascript更新<embed />参数

时间:2015-12-22 21:58:36

标签: javascript jquery html flash

我最近一直试图实现一个Flash应用程序,在某些时候需要通过html嵌入。它看起来像&gt;

<embed src=".." quality=".."  ... and at some point  FlashVars="&firstparam&secondparam..."

我要做的是实现一个下拉列表,当按下时更改FlashVars参数,以便应用程序显示不同的内容。我试过

document.getoElementByID().FlashVars="new parameters"

但它不起作用(它适用于高位默认参数,如src,height,width ......)

我还尝试使用javascript片段再次编写整个嵌入部分,但它也没有用。这是如何在JavaScript中完成的?我是这个领域的初学者,所以非常感谢任何帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

要了解您的代码无效的原因,您应该了解flashvars参数以及它的工作方式。

Adob​​e谈到了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");

以下是一个例子:https://jsfiddle.net/DinoMyte/1a6mwb13/2/