Javascript 触发通过swfobject'嵌入的flash对象功能;什么是SWF?
我已经浏览了我能找到的所有资源,以创建一种简化的方法来实现这一点,但每次尝试时,我都会发现一个基本错误。我简直无法让它工作 以下是我电影第一个关键帧中的flash测试动作脚本:Javascript 触发通过swfobject'嵌入的flash对象功能;什么是SWF?,javascript,jquery,flash,actionscript-2,swfobject,Javascript,Jquery,Flash,Actionscript 2,Swfobject,我已经浏览了我能找到的所有资源,以创建一种简化的方法来实现这一点,但每次尝试时,我都会发现一个基本错误。我简直无法让它工作 以下是我电影第一个关键帧中的flash测试动作脚本: import flash.external.*; //THIS... System.security.allowDomain("http://localhost", "*"); //...AND THIS ALSO REQUIRED! if (ExternalInterface.available) { tr
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>
…它隐藏了,所以我确信脚本可以看到对象
无论我尝试了什么方法,我总是会(在firefox中测试)出现如下错误:
错误:TypeError:mySWF.myExternalMethod不是函数
在狩猎中:
TypeError:“undefined”不是函数(计算“mySWF.myExternalMethod()”)
如果我尝试jQuery版本的getElementById(绕过embedHandler),我会得到:
错误:TypeError:$(…)。myExternalMethod不是函数。或TypeError:“undefined”不是函数(计算“$”(“#车牌输入”)。myExternalMethod()
我需要尽快完成这个项目,我已经筋疲力尽了。我们将非常感激您的任何帮助
更新:请注意,不再需要embedHandler,也不用于触发任何类型的事件。不过这是一段有用的代码,所以我选择保留它。将javascript中的
属性变量从空对象更改为:
var attributes = {
id: "flash_movie",
name: "flash_movie"
};
然后您应该能够使用以下方法调用公开的函数:
document.getElementById("flash_movie").myExternalMethod();
我正在我的Mac apache服务器上测试。我没有通过文件系统浏览页面,而是在全局安全闪存设置中将apache文件夹的根目录设置为受信任的位置。您确定要在实际的Flash Player实例上调用该方法,而不是在包含闪存的元素上调用该方法吗?换句话说,当你调用mySWF.myExternalMethod()时,你能确认mySWF引用了正确的东西吗?我添加了这段代码,适当地重命名了id/名称,现在它工作得很好,谢谢@danni!你是个明星!
document.getElementById("flash_movie").myExternalMethod();