代码之家  ›  专栏  ›  技术社区  ›  Jesse

外部接口

  •  0
  • Jesse  · 技术社区  · 16 年前

    我希望这是我错过的东西,因为我看得太久了。

    flash\u ready函数正确地返回了objectID,据我所知,其他一切都正常。

    <movename> ).test()不是有效的方法。

    代码如下:

    function flash_ready(i){
        document.getElementById(i).test('success!'); 
    }
    

    <script type="text/javascript">
        swfobject.embedSWF("/chainmaille/includes/media/flash/upload_image.swf", "/chainmaille/includes/media/flash/upload_image", "500", "50", "9.0.0","expressInstall.swf", {}, {allowScriptAccess:'always', wmode:'transparent'},{id:'uploader_flash',name:'uploader_flash'});
    </script>
    <object type="application/x-shockwave-flash" id="uploader_flash" name="uploader_flash" data="/chainmaille/includes/media/flash/upload_image.swf" width="500" height="50"><param name="allowScriptAccess" value="always"><param name="wmode" value="transparent"></object>
    

    AS3标准:

    package com.jesseditson.uploader {
    
      import flash.display.MovieClip;
      import flash.external.ExternalInterface;
      import flash.system.Security;
    
        public class UI extends MovieClip {
    
         // Initialization:
         public function UI() {
            Security.allowDomain('*');
            ExternalInterface.addCallback("test", test);
    
            var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
            var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
            navigateToURL(url, "_self");
        }
    
        public function test(t){
          trace(t);
        }
      }
    }
    

    我有一个非常类似的设置在另一台服务器上工作,但似乎不能让它在这一个工作。这是一个Hostgator共享服务器。可能是服务器的错吗?有人看到明显的语法问题吗?

    提前谢谢!

    5 回复  |  直到 16 年前
        1
  •  1
  •   Cory Petosky    16 年前

    Flash实际上还没有完成构建。你在给你的朋友打电话 flash_ready 来自构造函数的回调,因此JS试图在对象出现在stage之前调用。移动你的 闪光灯准备就绪 打电话给,比如说,一个 Event.ADDED_TO_STAGE

        2
  •  1
  •   Jesse    16 年前

    好的,在进一步的调查之后,似乎flash对象的多个实例有问题,因为我正在将它克隆到一个lightbox中。我已经开始工作了。

        3
  •  1
  •   Cdelconde    14 年前

    因此,对于所有从未见过flashplayer调试器在浏览器中的文件上运行的人来说,首先 this link that walks you through the setup 产生了一种神奇的体验:) 现在我的ExternalInterface发现:在同一个域中有一个沙盒冲突。这意味着flash无法访问www.yourdomain.com 从yourdomain.com。当然,奇怪的是,您没有显式地使用ExternalInterface调用域。 不管怎样,解决方案非常简单:将这个添加到我的.htaccess文件中,就这样!

    # Redirect non-www to www 
    RewriteCond %{HTTP_HOST} !^www\.
    RewriteRule (.*) http://www.youtdomain.com/$1 [R=301,L] 
    

    希望这对别人有帮助

        4
  •  0
  •   Aaron    16 年前

    flash\u准备好接收您期望的objectID了吗?

    另外,为什么要使用:

    var jscommand:String = "flash_ready('"+ExternalInterface.objectID+"');";
    var url:URLRequest = new URLRequest("javascript:" + jscommand + " void(0);");
    navigateToURL(url, "_self");
    

    ExternalInterface.call("flash_ready", ExternalInterface.objectID);
    
        5
  •  0
  •   Jason    16 年前

    发布源代码(预生成)。当您的浏览器显示[Flash].Method不是函数时,99%的时间意味着您在.swf准备好调用函数之前尝试在Flash中调用函数。我看到你试着这么做,但显然它不工作,所以必须关闭一些。因此,张贴您的预渲染源,我相信我们可以找到问题。