jQuery调用as3函数

时间:2012-06-07 00:39:46

标签: jquery actionscript-3 flash function call

更新:已回答!

6月7日 - 我找到了答案并接受了以下内容。我保留这些代码,以便其他人可以看到我遇到的问题,也许他们可以了解哪些有用,哪些无效。


旧帖子:

我刚想出如何让as3调用jQuery函数:as3 calling jQuery function

但现在我想知道jQuery如何调用as3函数。有什么想法吗?

更新:尚未修复 - 我的遗失是什么?

以下是我的jQuery中的代码

 function BeGone()
  {
      var flash = $("#BeauFullScreen");
      flash.myFunction();
       $("#Content").show();


  }

这是我在as3中的代码

import flash.external.*;
function callMe() 
{ 

    var bParts = Beau.content as MovieClip;
    bParts.Beau.BeauBody.LeftWing.gotoAndStop(1);
    bParts.Beau.BeauBody.RightWing.gotoAndStop(1);
    bParts.alpha = .5;

} 
ExternalInterface.call("myFunction", callMe);

我的嵌入式Flash对象代码:

<div id="flashContentABOVE">
            <object classid="33" width="100%" height="100%" id="BeauFullScreen" align="middle">
                <param name="movie" value="BeauFullScreen.swf" />
                <param name="quality" value="best" />
                <param name="bgcolor" value="#ffffff" />
                <param name="play" value="true" />
                <param name="loop" value="true" />
                <param name="wmode" value="transparent" />
                <param name="scale" value="noscale" />
                <param name="menu" value="true" />
                <param name="devicefont" value="false" />
                <param name="salign" value="" />
                <param name="allowScriptAccess" value="sameDomain" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="BeauFullScreen.swf" width="100%" height="100%" id="BeauFullScreen">
                    <param name="movie" value="Jesus.swf" />
                    <param name="quality" value="best" />
                    <param name="bgcolor" value="#ffffff" />
                    <param name="play" value="true" />
                    <param name="loop" value="true" />
                    <param name="wmode" value="transparent" />
                    <param name="scale" value="noscale" />
                    <param name="menu" value="true" />
                    <param name="devicefont" value="false" />
                    <param name="salign" value="" />
                    <param name="allowScriptAccess" value="sameDomain" />
                <!--<![endif]-->
                    <a href="http://www.adobe.com/go/getflash">
                        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
                    </a>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
            </object>
        </div>

4 个答案:

答案 0 :(得分:1)

这是一个很好的小插件,有一些关于如何使用它的描述

http://www.davecomeau.net/blog/56/jQuery+Plugin%3A+externalInterface

我希望它有所帮助!

这是一个更详细的答案:

*在您的html页面*

1创建包含id为“flashMovie”的flash的div      

2创建一个用于测试目的的按钮     单击“调用外部接口(带有成功回调)”

3不要忘记将所需的引用添加到jquery,query.externalinterface.js,swfobject(应该用你的sw对象替换)

<script type="text/javascript" src="/javascript/jquery/jquery-1.3.2.js"></script>
<script type="text/javascript" src="/javascript/jquery/jquery.externalinterface.js"></script>
<script type="text/javascript" src="/javascript/swfobject/swfobject.js"></script>

4添加一个单击按钮后将调用flash对象的JavaScript函数

<script type="text/javascript">

swfobject.embedSWF('/flash/externalInterfaceExample.swf', 'flashMovie', '238', '155', '10.0.0');

function interfaceTest()
{
    $('#flashMovie').externalInterface({
        method:'flashMethodToCall',   // this method has to be already defined in your flash object
        args:'some arguments',
        success: function(response)
        {
            alert('flash says: ' + response);
        },
        error: function(error)
        {
            alert('error: ' + error);
        }
    });
}
 </script>
动作脚本中的

* **

import flash.external.*;

function someMethod() 
{ 
// Here goes your code
} 
ExternalInterface.addCallback("flashMethodToCall", someMethod); 

答案 1 :(得分:1)

一个简单的(非jQuery)解决方案是使用externalInterface.addCallback在Flash中进行设置。然后你可以在你的jQuery / Javascript中的任何地方调用它。请记住,您需要specify the name and ID of the flash object才能让Javascript识别它。

答案 2 :(得分:1)

首先,在JS / jQuery代码中,您需要一个小更新:

function BeGone()
  {
      var flash = $("#BeauFullScreen").eq(0); //change here
      flash.myFunction();
       $("#Content").show();
  }

然后在Asctionscript中:

import flash.external.*;
function callMe() 
{ 

    var bParts = Beau.content as MovieClip;
    bParts.Beau.BeauBody.LeftWing.gotoAndStop(1);
    bParts.Beau.BeauBody.RightWing.gotoAndStop(1);
    bParts.alpha = .5;

} 
ExternalInterface.addCallback("myFunction", callMe); //change here

答案 3 :(得分:1)

为我工作的答案!

我必须添加3个重要元素!

1)下面是jQuery与as3通信并在as3中调用函数所需的代码行。

function BeGone()
{
$("#BeauFullScreen").get(0).myFunction(); /// THIS LINE WAS THE KEY!    
}

2)我还需要添加swfObject javascript:

<script> src="swfObject.js"></script>

3)**最后,我不得不使用JavaScript嵌入我的SWF,而不是Dreamweaver在我的问题中插入代码的方式。嵌入式JavaScript代码如下。

    <script>
    var flashvars = {
    };
    var params = {
        menu: "false",
        scale: "noScale",
        wmode: "transparent", // added this to no avail
        allowFullscreen: "true",
        allowScriptAccess: "always",
        bgcolor: "",

    };
    var attributes = {
        id:"BeauFullScreen"
    };
    swfobject.embedSWF(
        "BeauFullScreen.swf", 
        "flashContent", "100%", "100%", "10.0.0", 
        "expressInstall.swf", 
        flashvars, params, attributes);
</script>

我希望这有助于某人。感谢大家所做的一切努力!