触发通过swfoject'嵌入的flash对象功能;s嵌入SWF

Trigger a flash objects function embedded via swfobject's embedSWF?

本文关键字:flash 对象 功能 SWF 嵌入 swfoject      更新时间:2023-09-26

我已经查看了我能找到的每一个资源,以创建一种简化的方法来实现这一点,但每次尝试都会出现一个基本错误。我根本无法让它发挥作用!

这是我电影第一个关键帧的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()")

如果我尝试jQuery版本的getElementById(绕过embedHandler),我会得到:

错误:TypeError:$(…).myExternalMethod不是函数。或TypeError:"undefined"不是函数(正在评估"$('#number plate input').myExternalMethod()')

我需要尽快完成这个项目,我已经筋疲力尽了。如有任何帮助,我们将不胜感激。

更新:请注意,embedHandler不再需要,也不再用于触发任何类型的事件。不过,这是一段有用的代码,所以我选择保留它。

将javascript中的attributes变量从空对象更改为:

var attributes = {
  id: "flash_movie",
  name: "flash_movie"
};

然后您应该能够使用调用暴露的函数

document.getElementById("flash_movie").myExternalMethod();