1

我正在使用 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 不是函数”错误。

关于在哪里看的任何建议?

4

3 回答 3

2

错误 .SetVariable is not a function in Firefox 的一种解决方案是

为 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 方法中调用它

穆罕默德·哈立德·努尔

于 2011-08-29T11:01:41.990 回答
1

您应该改用 ExternalInterface,它比 SetVariable 更健壮(速度较慢,但​​除非您真的需要速度,否则应该使用它)

通常导致这种情况的一种常见情况是在加载 swf 之前尝试调用 SetVariable 调用。通常,在您尝试调用方法之前,让您的 swf 调用页面并告诉 js 已准备好接收调用会更安全。

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

于 2009-09-09T22:37:26.153 回答
0

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

于 2009-09-08T10:42:35.587 回答