嘿,所以我有一堆麻烦让ExternalInterface工作,这很奇怪,因为我经常使用它。ExternalInterface
我希望这是我错过了,因为我一直在看它太久了。
flash_ready函数正确地返回objectID,并且据我所知,其他所有内容都是按顺序排列的。
不幸的是,当我运行它时,我得到一个错误(通过浏览器变化)告诉我,基本上document.getElementById(<movename>
).test()不是一个有效的方法。
下面的代码:
的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的和th闪光灯嵌入得很好,所以这不是问题。
我有一个非常类似的设置工作在另一台服务器,但似乎无法得到它在这一个工作。这是一个Hostgator共享服务器。它可能是服务器的错?有人看到任何明显的语法问题?
提前致谢!
也不会是,在调用'测试(t)的时间'没有定义? – 2010-04-29 09:46:25
那么,在加载flash之前不会调用test(t),因为flash_ready()函数是从flash本身调用的。不知道这是否有道理,但这里是流程: UI实例化 - >构造函数(UI) - > flash_ready()调用 - > test()调用 因此,闪存本质上通过JavaScript调用测试函数,所以测试必须定义。是吗? – Jesse 2010-04-29 10:03:59
它是否在所有浏览器中都这样做?我有时会在IE中遇到一些我必须解决的问题。 – 2010-04-29 14:08:43