从javascript触发actionscript函数(在flash对象中)

时间:2011-05-24 10:30:45

标签: javascript flash

我有一个flash(AS2.0)应用程序,其中包含一个需要从html表单链接触发的函数 flash函数只运行gotoAndPlay('标签名称'); 所以我的HTML是 <a href="" id="flashTrigger" />

我的flash功能

  
function myFunction(){
  gotoAndPlay("myLabel");
}

任何人都知道如何从html链接标记触发flash函数,或者从Javascript函数运行“gotoAndPlay”

我环顾四周,似乎只找到了如何从flash中启动javascript函数

这是我到目前为止的代码 - 我正在做一些愚蠢的事情 闪光灯:

ExternalInterface.addCallback( "myExternalMethod", this, myFunction );

function myFunction(){
gotoAndPlay("fade");
}

的Javascript

function executeFlash()
{
  getObjectById("myFlashID").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() {

    $('#WhatDoesmean').click(function(){
        executeFlash();
    });

});

我已将myFlashID设置为id:
初始'对象标签' 和IE只'嵌入标签'

编辑: 目前我的目标是闪存对象很好,这是外部(闪存侧)功能无法正常工作 - 错误消息,myExternalMethod不是函数

4 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

在您的Flash文件中添加回调:

//**updated**
if (ExternalInterface.available)
{
    trace("ExternalInterface= " + ExternalInterface.available);
    flash.external.ExternalInterface.addCallback("myExternalMethod", null, myFunction);
}

function myFunction()
{
    gotoAndPlay("myLabel");
}

在你的javascript中:

function executeFlash()
{
 //**updated**
  alert('JS call works fine!');
  getObjectById("myFlashID").myExternalMethod(); // myFlashID = your SWF object ID
}

function getObjectById(objectIdStr) {
        var r = null;
        var o = getElementById(objectIdStr);
        if (o && o.nodeName == "OBJECT") {
            if (typeof o.SetVariable != UNDEF) {
                r = o;
            }
            else {
                var n = o.getElementsByTagName(OBJECT)[0];
                if (n) {
                    r = n;
                }
            }
        }
        return r;
    }

在您的HTML中(将您的SWF对象嵌入HTML中的id = myFlashID):

<a href="" id="flashTrigger" onclick="executeFlash()" />

您可以在此处找到 ExternalInterface http://flash-reference.icod.de/

的文档

答案 2 :(得分:0)

几年前我用这个来捕获flash对象:

var flashObj = getFlash("Flash_Name");

function getFlash(movieName)
{
if (window.document[movieName])
{
    return (window.document[movieName]);
}
if (navigator.appName.indexOf("Microsoft Internet")==-1)
{
    if (document.embeds && document.embeds[movieName])
    {
        return (document.embeds[movieName]);
    }
}
else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
{
    return (document.getElementById(movieName));
}
}

然后flashObj.gotoAndPlay();应该有效

答案 3 :(得分:0)

我设法通过使用SWFObject来解决问题

通过SWFObject.js轻松访问flash对象方法,但是没有它就没有工作。不知道为什么会这样。

所有上述建议都适用于SWFObject.js,但没有它似乎没有工作

为每个人的建议干杯

安迪