我正试图通过javascript控制flash播放器, 我按照我在互联网上看到的那样做了一个“不支持”的错误
这里我写的是:
on js:
function getFlashMovieObject(movieName)
{
if (window.document[movieName])
{
return window.document[movieName];
}
if (navigator.appName.indexOf("Microsoft Internet")==-1)
{
if (document.embeds && document.embeds[movieName])
return document.embeds[movieName];
}
else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
{
return document.getElementById(movieName);
}
}
function SetNum1()
{
var x=getFlashMovieObject("flashmovie");
x.Setvariable("z0", "Z0");
//document.getElementById("flashmovie").setVariable("z0", "Z0");
alert("hi");
}
on html:
<object id="flashmovie" width="40" height="300">
<param name="movie" value="complex Ex A2P.swf">
<embed src="complex Ex A2P.swf" width="400" height="300">
</embed>
</object>
注意:我试过“Setvariable”,“setvariable”,“SetVariable”和“setVariable”(大写字母的差异)
答案 0 :(得分:0)
您可以在加载DOM后调用JS函数SetNum1
- 最简单的方法是将脚本放在</body>
标记之前。
此外,您需要确保在AS代码中启用了Setvariable
功能:
ExternalInterface.addCalback("Setvariable", setVariable);
//the second parameter is the function name in the Actionscript code
答案 1 :(得分:0)
除了之前的推荐之外还有几件事情:
您需要确保您的Flash动画
<param name="allowscriptaccess" value="always">
在嵌入代码中。如果这不起作用,请尝试在javascript中注销该函数以确保它在调用之前存在,如
中所示var x=getFlashMovieObject("flashmovie");
console.log("function", x.Setvariable); // see what you get in your console log here
如果您在控制台中看到未定义,则可能存在排序问题,并且需要更改执行顺序以确保您的swf存在并且在调用之前添加了回调。在初始化的那一瞬间发生了很多事情,你想确保事情以正确的顺序发生。
最后,如果这仍然不起作用,可能存在安全问题,您可以通过添加
快速修复Security.allowDomain('*');
在您的类定义(或您存储代码的任何位置)下的actionscript中。如果最后一项修复了问题,您可能需要查看Security.allowDomain,尤其是在使用ExternalInterface时,您可能会担心跨站点脚本攻击。在大多数情况下,这很好,但是如果您的swf可以访问您的数据库,将被其他站点或您自己站点的应该是安全的区域加载,那么最终可能会非常糟糕,因此请仅使用上面的全局解决方案小心。