0

更新:已回答!

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

4 回答 4

1

一种简单的(非 jQuery)解决方案是在 Flash 中使用externalInterface.addCallback. 然后你可以从你的 jQuery/Javascript 中的任何地方调用它。请记住,您需要指定 Flash 对象的名称和 ID,以便 Javascript 识别它。

于 2012-06-07T01:55:30.097 回答
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); 
于 2012-06-07T00:46:53.140 回答
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
于 2012-06-07T08:09:06.860 回答
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>

我希望这可以帮助别人。感谢大家所有的努力!

于 2012-06-08T00:21:45.633 回答