为什么Internet Explorer在ASPX中看不到我的Flash ExternalInterface方法
Why does Internet Explorer fail to see my Flash ExternalInterface method in ASPX?
我正在使用Javascript调用一个方法,该方法使用SWFObject嵌入ASPX页面中的Flash电影中。它在Firefox中运行良好,但InternetExplorer7和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抱怨该函数的最后一行"对象不支持此属性或方法"。
谢谢!
第二个对象嵌入标记中似乎缺少用于IE 的id参数
请参阅SWFObject的常见问题解答#7,它专门解决了这个问题。
事实证明Capability.isDebugger((是罪魁祸首。为了简洁起见,我在最初的帖子中省略了这一点(因为我认为这不重要(,但ActionScript类中的构造函数实际上看起来是这样的:
public function Player()
{
Security.allowDomain("localhost");
if (!Capabilities.isDebugger)
{
ExternalInterface.addCallback("test", test);
}
}
我添加该检查是因为ExternalInterface.addCallback()
在Flash调试器中执行时抛出"错误:错误#2067:ExternalInterface在此容器中不可用。ExternalInterface需要Internet Explorer ActiveX、Firefox、Mozilla 1.7.5及更高版本,或其他支持NPRuntime的浏览器。"。
很明显,InternetExplorer中的Flash播放器是一个调试版本;ExternalInterface.addCallback()
从未接到电话。
- 为什么不't Javascript对我的输入值进行了一些重新检查
- 可以't让我的if语句处理js中的html表单输入
- 我的单元测试选项是什么
- 将输入字段中的文本提交到我的数据库,同时将其添加到我的列表中
- 我的职位回报太快了,如何做出承诺
- 我的jQuery插件参数没有正确启动,遇到了问题
- 如何识别我的网站中的慢速设备
- 如何将JSON数据导入我的ejs模板
- JQuery添加元素需要在我的js之前再次添加JQuery脚本
- 知道为什么我的旋转木马不会自动更改图片吗
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- 如何使我的flash文件在网站上不可点击
- 在我的网站上嵌入Flash对象会成为Javascript关键事件的问题吗?
- 为什么我从flash到Javascript的调用在IE9中失败
- 为什么Internet Explorer在ASPX中看不到我的Flash ExternalInterface方法
- 为什么这个正则表达式不能识别我的模式?(适用于flash)
- 为什么我的Google Analytics事件跟踪代码不能从我的Flash电影中调用的PHP脚本中工作
- 我的应用程序被黑客入侵了吗?神秘的DOM操纵注入了Flash
- 我正在寻找一个类似下面链接的flash或javascript幻灯片
- 是否有可能使用javascript删除这个隐藏的Zugo Flash电影在我的页面上