使用javascript更新<嵌入>参数

Using javascript to update <embed> parameter

本文关键字:嵌入 gt 参数 lt javascript 更新 使用      更新时间:2023-09-26

我最近一直在尝试实现一个flash应用程序,该应用程序有时需要通过html嵌入。看起来有点像>

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

我想做的是实现一个下拉菜单,当按下时会更改FlashVars参数,这样应用程序就会显示不同的东西。我试过

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

但它不起作用(它完全适用于高亮默认参数,如src、height、width…)

我也尝试过用javascript代码段再次编写整个嵌入部分,但也没有成功。javascript是如何做到这一点的?我是这个领域的初学者,所以我们非常感谢您的帮助。

谢谢。

要理解代码不工作的原因,您应该了解flashvars参数是什么以及它是如何工作的。

Adobe在这里说过,例如:

HTML<对象>当SWF文件加载到web浏览器中时,标记会将变量发送到该文件的顶层。<对象>标记用于将SWF文件添加到HTML页面。<EMBED>标签也可以使用,但它已经过时了。

因此,在这里我们可以理解,这些变量是在加载SWF时加载的,这就是为什么即使您更改了flashvars参数,也不会对加载的SWF做任何事情,而加载的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的情况下,当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端之间建立通信。。。

希望这能有所帮助。

只需执行以下操作:

$('embed') // targets the embed tag in the DOM

.attr("attribute-name","attribute-value");

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