隐藏后Flash对象的方法不可用

时间:2012-12-18 15:54:35

标签: javascript flex dom

我正在使用jQuery开发Javascript,使用Chrome 23.0.1271.97。我有一个Flex <object>,HTML如下:

<div id="chartdiv" style="display:none;">
<object type="application/x-shockwave-flash" id="barchart" data="barchart.swf" style="width:100%;height:100%;">
<param name="movie" value="barchart.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="transparent" />
</object>
</div>

div通常是隐藏的,但无论如何都要在onLoad上初始化对象。但是,当加载应用程序时,会显示此div并且一切正常。问题是,从那时起,它再次隐藏(只是隐藏,如$div.hide(),而不是未初始化),然后重新显示,我无法访问Flex对象方法。

我得到Object #<HTMLObjectElement> has no method 'blah'。它似乎已被修改,但我不确定是什么导致它。

那有什么变化?好问题。在成功加载时,对象在控制台中起作用并且如下所示:

<object type=​"application/​x-shockwave-flash" id=​"barchart" data=​"barchart.swf" style=​"width:​100%;​height:​100%;​">​
</object>​

对象在尝试失败时(在显示,隐藏和返回之后)看起来像这样:

<object type=​"application/​x-shockwave-flash" id=​"barchart" data=​"barchart.swf" style=​"width:​100%;​height:​100%;​">​
<param name=​"movie" value=​"barchart.swf">​
<param name=​"quality" value=​"high">​
<param name=​"allowScriptAccess" value=​"always">​
<param name=​"wmode" value=​"transparent">​
</object>​

这让我觉得我可能正在寻找错误的地方。我已经逐步完成了我的前端Javascript代码,除了通过jQuery隐藏它之外,似乎没有任何修改对象的调用。我被告知Flex对象不知道它是否显示。在我要求查看代码之前,我想确定我是在正确的轨道上。

3 个答案:

答案 0 :(得分:1)

这是已知问题。如果您不想重置Flash对象,最佳解决方案之一就是将其大小设置为几个像素,这对用户是不可见的,但对于浏览器来说是“可见的”。

答案 1 :(得分:1)

将其移出屏幕以使对象仍然可行。 请参阅本文中的示例: jquery hide a div that contains flash without resetting it

答案 2 :(得分:0)

我一直在搜索,似乎是flash object gets reset when hidden

所以我的解决方案是测试jQuery / DOM对象,看看是否定义了方法:

function isFlashWorking()
{
    return ($chart && chart.blah)
}

其中blah是对象中的已知方法。