Firefox中的零星“SetVariable不是一个函数”

时间:2009-09-08 10:34:30

标签: javascript flash firefox swfobject

我正在使用swfObject在我的应用中嵌入一个Flash播放器。偶尔,我在尝试与嵌入式Flash对象通信时,会看到FireFox中的错误(仅限于IE或Chrome中)。错误说“SetVariable不是函数”。导致此错误的代码在不久之前执行得很好,现在显示此错误。如果我重新加载页面并重新运行,那么这种情况不会再次发生。

我在网上看到过关于FF与SetVariable不能很好地合作的报道,但没有什么可以修复的。显然swfObject应该隐藏所有这些,但事实并非如此。

以下是我的代码:

...
var flashvars=...
var params=...
var attributes = {};
attributes.id = "my_player";

if( swfobject.hasFlashPlayerVersion("9.0.0") )
{
    swfobject.embedSWF("my_player_js.swf", "my_player_holder", "1", "1", "9.0.0", "", flashvars, params, attributes );
}
....

document.getElementById("my_player").SetVariable( "method:stop", "");

最后一行,在FF上,有时导致“SetVariable不是函数”错误。

关于在哪里寻找的任何建议?

3 个答案:

答案 0 :(得分:2)

错误.SetVariable的一个解决方案不是Firefox中的函数

Give Id& Name使用与Object标记的id和name值不同的值。

var isInternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
// Handle all the FSCommand messages in a Flash movie.
var bannerObj = isInternetExplorer ? document.all.banner : document.banner;
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 LoadRefference()
{
 bannerObj = getFlashMovieObject("banner");
 if(typeof(bannerObj.SetVariable)=='undefined')
    bannerObj = document.getElementById('embbanner');
}

确保在文档完全加载后调用LoadRefference。您可以在document.ready方法中调用它

Muhammad Khalid Noor

答案 1 :(得分:1)

你应该使用ExternalInterface,它比SetVariable更强大(更慢,但除非你真的需要速度,你应该使用它)

通常导致这种情况的一种常见情况是在加载swf之前尝试调用SetVariable调用。一般来说,让你的swf呼叫到页面更安全,告诉js你在尝试调用方法之前已经准备好接收呼叫了。

既然你说'导致此错误的代码就在不久之前执行得很好',那么我认为上述内容可能不是你的问题,但无论如何都值得检查。也许如果您正在修改页面上的swf,浏览器会尝试重新加载它,这会导致它一次消失几毫秒?

答案 2 :(得分:0)

我不知道swfObject或Flash,但如果在初始化之前在对象上运行代码,则经常会发生与这些类似的错误。什么触发您的代码运行?负载? DOMContentLoaded?