0

嘿,所以我在让 ExternalInterface 工作时遇到了很多麻烦,这很奇怪,因为我经常使用它。

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

flash_ready 函数正确返回了 objectID,据我所知,其他一切都正常。

不幸的是,当我运行它时,我收到一个错误(因浏览器而异),告诉我 document.getElementById( ).test() 基本上<movename>不是一个有效的方法。

这是代码:

javascript:

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

嵌入 Html(生成):

<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);
    }
  }
}

Swfobject 是通过谷歌代码包含的,并且闪存嵌入得很好,所以这不是问题。

我有一个非常相似的设置在另一台服务器上运行,但似乎无法让它在这台服务器上运行。这是一个 Hostgator 共享服务器。会不会是服务器的错?有人看到任何明显的语法问题吗?

提前致谢!

4

5 回答 5

1

Flash实际上还没有完成构建。您正在flash_ready从构造函数调用回调,因此 JS 试图在对象出现在舞台上之前调用。将您的flash_ready呼叫转移到一个Event.ADDED_TO_STAGE听众,它应该开始工作。

于 2010-04-29T21:58:04.513 回答
1

好的,经过进一步调查,flash 对象的多个实例似乎存在问题,因为我将它克隆到灯箱。我现在已经让它工作了。

于 2010-06-16T00:22:30.890 回答
1

只花了 5 个小时来解决这个问题。这一切真的很令人沮丧。就我而言,解决方案非常简单,我永远也猜不到。因此,首先对于那些从未见过在浏览器内的文件上运行 Flash 播放器调试器的人来说,找到这个引导您完成设置的链接已经产生了一种神奇的体验 :) 现在我的 ExternalInterface 发现:有一个沙盒违规在同一个域内。这意味着 flash 无法从 yourdomain.com 访问 www.yourdomain.com。当然,奇怪的是您没有使用 ExternalInterface 显式调用域。无论如何,解决方案非常简单:将其添加到我的 .htaccess 文件中,就是这样!

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

希望这可以帮助某人

于 2011-10-27T05:29:38.483 回答
0

flash_ready 是否正在接收您期望的 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);
于 2010-04-29T17:21:05.773 回答
0

发布您的来源(预先生成)。当您的浏览器显示 [Flash].Method is not a function 时,99% 的时间表示您在 .swf 准备好之前尝试在 Flash 中调用函数。我看到你试图这样做,但显然它不起作用,所以必须关闭一些东西。因此,发布您的预渲染源代码,我相信我们可以找到问题所在。

于 2010-04-29T21:52:57.470 回答