Javascript到Flash通信不起作用

我正试图通过javascript控制flash播放器, 我按照我在互联网上看到的那样做了一个“不支持”的错误 这里我写的: 在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");
}
在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”(大写字母的差异)     
已邀请:
在DOM加载后你可以调用JS函数
SetNum1
- 最简单的方法是将脚本放在
</body>
标签之前。 此外,您需要确保在AS代码中启用了
Setvariable
功能:
ExternalInterface.addCalback("Setvariable", setVariable); 
//the second parameter is the function name in the Actionscript code
    
除了之前的推荐之外还有几件事: 您需要确保您的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可以访问您的数据库,将被其他站点或您自己站点的应该是安全的区域加载,那么最终可能会非常糟糕,因此请仅使用上面的全局解决方案警告。     

要回复问题请先登录注册