【发布时间】:2011-09-19 20:26:57
【问题描述】:
我正在使用 Javascript 调用使用 SWFObject 嵌入在 ASPX 页面中的 Flash 电影的方法。它在 Firefox 中运行良好,但 Internet Explorer 7 和 8(到目前为止)声称 swfobject.getObjectById() 返回的对象“不支持此属性或方法”。我在这个网站和其他网站上发现了类似的帖子,但我没有尝试在 IE 中解决此问题。
ActionScript 3.0 类:
public class Player extends MovieClip {
public function Player()
{
Security.allowDomain("http://localhost");
ExternalInterface.addCallback("test", test);
}
public function test():void
{
debugBox.appendText("test() called successfully\n");
}
}
ASPX 标记:
<head runat="server">
<script type="text/javascript" src="Scripts/swfobject.js"></script>
<script type="text/javascript">
swfobject.registerObject("myPlayer", "9.0.0", "scripts/expressInstall.swf");
</script>
</head>
<body>
<form id="form1" runat="server">
<div class="movie">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="640" height="640" id="myPlayer">
<param name="movie" value="Player.swf" />
<param name="allowscriptaccess" value="always" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="Player.swf" width="640" height="640">
<!--<![endif]-->
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif"
alt="Get Adobe Flash player" />
</a>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</object>
</div>
在 ASPX 标记中,尝试获取 Flash 对象并对其调用 test() 方法的代码发生在来自第三方组件 (DevExpress ASPxHiddenField) 的 AJAX 回调中。该回调由 Flash 影片加载后的用户输入触发:
<dx:ASPxHiddenField ID="filenameHiddenField" runat="server" OnCustomCallback="filenameHiddenField_CustomCallback"
SyncWithServer="False">
<ClientSideEvents EndCallback="function(s, e) {
var playerObject = swfobject.getObjectById("myPlayer");
playerObject.test();
}" />
</dx:ASPxHiddenField>
Internet Explorer 抱怨该函数的最后一行,“对象不支持此属性或方法”。
谢谢!
【问题讨论】:
-
尝试用实际的引号字符替换 url 编码的引号字符。
-
我相信这些引号需要转义,因为它们位于 EndCallback 属性中的一组双引号内。尝试这样做会使 Visual Studio 设计者感到困惑,并导致 IIS 报告解析器错误。
-
尝试双引号或双引号。
-
将 ' 更改为 $quot;不是逃避它就是对它进行 URLencoding。在用双引号(“)包裹的字符串中,您可以使用单引号('),因此将 $quot; 更改为 ' 应该没问题。
-
这不是问题。 DevExpress 为其客户端事件提供了一个自定义编辑器,并以这种方式生成代码;正如我在原帖中所说,这在 Firefox 中运行良好。在普通 JavaScript 函数(DevExpress 控件之外)中调用
swfobject.getObjectById("myPlayer").test()在 Internet Explorer 中会导致相同的错误,但在 FF 中不会。由于某种原因,IE 只是看不到ExternalInterface.addCallback()公开的方法。
标签: javascript asp.net flash internet-explorer swfobject