我正在使用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对象不知道它是否显示。在我要求查看代码之前,我想确定我是在正确的轨道上。
答案 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
是对象中的已知方法。