我正在使用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不是函数”错误。
关于在哪里寻找的任何建议?
答案 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?