0

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

4

3 回答 3

1

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

于 2013-11-16T00:37:40.353 回答
1

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

于 2012-12-18T16:57:47.033 回答
0

我一直在搜索,似乎flash 对象在 hidden 时被重置

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

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

blah对象中的已知方法在哪里。

于 2012-12-18T16:14:01.120 回答