【问题标题】:ExternalInterface.addCallback is not workingExternalInterface.addCallback 不起作用
【发布时间】:2010-12-13 03:28:01
【问题描述】:

这是我的 AC3 代码

private function uploadet( dosya:String ):void {

        var uploader:URLRequest = new URLRequest(dosya);
            localFile.upload(uploader);
    }


        var a = flash.external.ExternalInterface.addCallback("uploadet",uploadet);

这是Javascript

   <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">

        swfobject.registerObject("myId", "9.0.0", "expressInstall.swf");



        function uploadet(dosya){
        var myFlashMovie = swfobject.getObjectById("myId");
       myFlashMovie.uploadet(dosya);
        }

        </script>        


<style type="text/css">
<!--
body {
    background-color: #e6e6e6;
    margin-top: 50px;
}
-->
</style></head>
    <body >
        <object id="myId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="120">
                <param name="movie" value="SimpleUploader.swf" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="SimpleUploader.swf" width="300" height="120">
                <!--<![endif]-->
                <div>

                </div>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
            </object>
          <div id="flash"  align="center">

          </div>

        <div align="center"><b>Javascript Feedback:</b></div>
        <div align="center" id="output"></div>        

        <input type="button" name="Submit" value="Submit" onclick="uploadet('dsadsa.php');" />

我不能让它工作,感谢任何帮助。

谢谢

【问题讨论】:

    标签: javascript actionscript


    【解决方案1】:

    您的问题是您可能没有到达正确的&lt;OBJECT&gt; 元素,使用:

    var myFlashMovie = document.getElementById('simpleUploader');
    

    您的嵌套标签具有相同的 id 属性,会产生意想不到的结果。

    您应该使用 SWFObject(一个广为人知和使用的 Flash 嵌入库)来嵌入您的 Flash 电影,并使用方法 swfobject.getObjectById() 正确访问您的 &lt;OBJECT&gt; 标签。

    要了解有关 SWFObject 的更多信息,请点击此链接:

    http://code.google.com/p/swfobject/

    这是 Adob​​e 提供的初学者教程(适用于 SWFObject):

    http://www.adobe.com/devnet/flashplayer/articles/swfobject.html

    通过以下链接在 API 文档中查找 getObjectById():

    http://code.google.com/p/swfobject/wiki/api

    【讨论】:

    • 是的,我制作了 SWFObject 并编辑了我的问题,但它仍然无法正常工作。
    • 介意提供一些错误信息吗?不工作时会发生什么?
    【解决方案2】:

    您必须在网络服务器上部署 Flash 应用程序才能对其进行测试(或让自己成为本地网络服务器)。 如果您从本地主机加载文件作为文件 (file:///c:.....),flash player 将不允许您使用外部接口。

    【讨论】:

    • 确实,这解决了我的问题。非常感谢。
    【解决方案3】:

    当您嵌入 SWF 时,如果不允许编写脚本,您将无法使用 ExternalInterface,请阅读此Adobe Knowledge Base 文档了解更多信息。换句话说,如果您将它直接嵌入到页面中,请使用此 HTML:

    <object ... >
        .
        .
        .
        <param name="allowScriptAccess" value="always"/>
    </object>
    

    如果您使用的是 SWFObject,则如下:

    var parametersObj = { allowScriptAccess: "always" };
    swfobject.embedSWF(
        swfPath,
        targetElement,
        swfWidth,
        swfHeight,
        minFlashVersion,
        expressInstall,
        flashvarsObj,
        parametersObj,
        attributesObj
    );
    

    【讨论】:

      【解决方案4】:

      不要使用 getObjectById 方法来获取 swf 对象。 您可以使用以下代码:

      swfobject.registerObject("myId", "9.0.0", "expressInstall.swf", callbackFn);
      function callbackFn(status) {
        if (status.success) {
           var obj = status.ref;
           document.getElementById("but1").onclick = function() {
             if (obj && typeof obj.uploadet!= "undefined") {
               obj.uploadet(dosya);
              }
            };
       }
      

      更多详情可以参考Static Embed method:Browser communication test page with callback

      和Dynamic Embed method:Browser communication test page with callback

      【讨论】:

      • 这可能没有解决他的问题,但它解决了我的问题。我认为这是相关的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-06
      • 2011-11-14
      相关资源
      最近更新 更多