ExternalInterface.addCallback无效

时间:2009-11-04 18:35:15

标签: javascript actionscript

这是我的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');" />

我无法得到它,任何帮助都表示赞赏。

由于

4 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

不要使用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

答案 2 :(得分:1)

嵌入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
);

答案 3 :(得分:0)

您的问题是您可能无法使用以下方法找到正确的<OBJECT>元素

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

您的嵌套代码具有相同的id属性,会产生意外结果。

您应该使用SWFObject(一个广为使用的Flash嵌入库)来嵌入您的Flash电影,并使用swfobject.getObjectById()方法正确访问您的<OBJECT>标记。

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

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

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

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

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

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