【问题标题】:Can't get ExternalInterface in flash to work无法让 Flash 中的 ExternalInterface 工作
【发布时间】:2009-05-14 13:38:13
【问题描述】:

Flash 很新。我正在使用 XSPF 音乐播放器(在此处找到的超薄版本 (http://musicplayer.sourceforge.net/),用 AS2 编写)来播放网站上的 mp3 列表。每次加载曲目时我都需要进行 javascript 调用。我试图通过 ExternalInterface 来做到这一点,但到目前为止还没有运气。这是我的设置:我正在一台 linux 机器上编写站点,该机器也装有测试服务器,但在 windows 中编辑 flash。我正在使用 firefox 3.0.10 在同一个 linux 机器上测试该站点。 html 和 actionscript 发布在这里 (http://pastebin.com/f36b1da0e)。有人看到我的代码有什么问题吗?关于为什么它不起作用的任何想法?我觉得这是我的基本设置中的东西......

谢谢, 丹

【问题讨论】:

    标签: flash actionscript externalinterface


    【解决方案1】:

    我快速查看了您的代码,看起来还可以(无论如何都是 actionscript)。 我要说的是尝试嵌入 swf 的不同方法。很久以前(所以我不记得所有细节了),但我正在用不同的浏览器测试外部接口,有时它可以在 IE 中工作,但不能在 Firefox 中工作,如果我尝试嵌入 swf 的不同方法,它会工作在firefox 但不是 IE 或只是 IE 6 而不是 7!

    这很烦人。无论如何,我发现当时在两个主要浏览器中都有效的唯一方法(chrome 已经过时)是使用发布应用程序时从 flexbuilder 创建的 HTML。当然,我确实需要对其进行一些修改(因为我们使用 cocoon 和 xsl),但它确实有效。

    (从那以后我认为swfobject 得到了改进,如果我是你,我也可以试试)

    我已在http://pastebin.com/f79b5b3f3 上发布了来自 flexbuilder 的 HTML 模板,它需要 AC_OETags.js 文件 (http://pastebin.com/f3937a336) 和 playerProductInstall.swf(您可能需要下载 flexbuilder 才能获得此模板)。


    下面的评论代码

    <mx:HTTPService id="mySerivceCall" 
        url="{'myPHPFile.php'}"
        result="resultHandler(event)" 
        fault="faulthandler(event)"
        showBusyCursor="false" 
        resultFormat="e4x"> 
        <mx:request>
            <time>{new Date().getTime()}</time>
        </mx:request>
    </mx:HTTPService>
    

    我总是将时间添加到 httpservice,确保它不会被缓存(IE 非常不擅长)。只需将任何其他参数粘贴到请求部分,结果格式只是告诉 flex 结果是 e4x 格式的 XML,这使得处理 XML 非常简单。

    【讨论】:

    • 忘了说你总是可以使用getURL(这是在externalInterface之前使用的,在AS2中我会使用getURL,然后当我搬到AS3时我使用了externalInterface)。类似 getURL{"Javascript:alert('hello world')"};请注意这一点,如果您在同一帧中调用 2 个 getURL,那么实际上只会调用最后一个。
    • 我可以使用 getURL 来调用并将变量传递给 php 函数吗?每次播放歌曲时,我都使用 ExternalInterface 调用 javascript 来编辑 xml 文件,因此无论如何最好通过 php。另外,我觉得 getURL 已经过时并且最终可能会被贬值;这就是我到目前为止远离它的原因......
    • 只要您使用的是 AS2,那么我认为没有理由不使用 getURL。如果你想调用一个 php 文件(如果你能够使用 flex),那么你应该尝试一个 httpservice 调用(我已经粘贴了上面的代码作为答案)。使用 getURL 传递变量应该如下所示,getURL("myFuncInJavascript(" + param1 + "," + param2 +")");
    • hmm 好久没看AS2了,我觉得e4x可能是AS3的一个特性吧?
    • 感谢 Kenneth,我开始认为我应该废弃我正在使用的 mp3 播放器,并找到一个用 as3 编写的播放器。似乎它可以解决很多头痛......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2011-03-20
    相关资源
    最近更新 更多