我查看了我能找到的所有资源,以创建一种简化的方法,但每次尝试时我都会遇到一个基本错误。我根本无法让它发挥作用!
这是我的电影第一个关键帧的flash测试动作:
import flash.external.*; //THIS...
System.security.allowDomain("http://localhost", "*"); //...AND THIS ALSO REQUIRED!
if (ExternalInterface.available) {
trace("ExternalInterface= " + ExternalInterface.available);
flash.external.ExternalInterface.addCallback("myExternalMethod", null, myFunction);
}
function myFunction() {
gotoAndStop(2);
}
这是我的javascript / jQuery:
<script type="text/javascript">
var flashvars = {};
var params = {
wmode: "transparent",
allowscriptaccess: "always"
};
var attributes = { //The addition of these attributes make it work!
id: "number-input",
name: "number-input"
};
var embedHandler = function (e){
mySWF = e.ref;
};
swfobject.embedSWF("images/flash-form.swf", "number-input", "800", "320", "9.0.0", "expressInstall.swf", flashvars, params, attributes, embedHandler);
function executeFlash() {
getObjectById("number-input").myExternalMethod();
}
function getObjectById(objectIdStr) {
var r = null;
var o = document.getElementById(objectIdStr);
if (o && o.nodeName == "OBJECT") {
if (typeof o.SetVariable != undefined) {
r = o;
} else {
var n = o.getElementsByTagName(OBJECT)[0];
if (n) {
r = n;
}
}
}
return r;
}
$(function() {
$('#main-button-big').click(function(event){
event.preventDefault();
executeFlash();
});
});
</script>
如果我做一些愚蠢的事情,闪光似乎成功地嵌入......
$(mySWF).hide();
...它隐藏了,所以我确信脚本可以看到对象。
无论我尝试做什么方法,我总是(在firefox中测试)得到如下错误:
错误:TypeError:mySWF.myExternalMethod不是函数。
在野生动物园:
TypeError:'undefined'不是函数(评估'mySWF.myExternalMethod()')
如果我尝试jE版本的getElementById(环绕embedHandler),我得到:
错误:TypeError:$(...)。myExternalMethod不是函数。或TypeError:'undefined'不是函数(评估'$('#number-plate-input')。myExternalMethod()')
我需要让这个项目快速完成并且在我的系绳结束时。非常感谢任何帮助。
更新:请注意,不再需要embedHandler,也不会用于触发任何类型的事件。虽然这是一段很有用的代码,所以我选择将其保留下来。
答案 0 :(得分:1)
将javascript中的attributes
变量从空对象更改为:
var attributes = {
id: "flash_movie",
name: "flash_movie"
};
然后你应该能够使用:
调用公开的函数document.getElementById("flash_movie").myExternalMethod();