【问题标题】:jQuery calling an as3 functionjQuery 调用 as3 函数
【发布时间】:2012-06-07 00:39:46
【问题描述】:

更新:已答复!

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>

【问题讨论】:

标签: jquery actionscript-3 flash function call


【解决方案1】:

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

【讨论】:

  • 天哪,我真的需要一些帮助。你能和我一起使用 TeamViewer.com 吗? :)
【解决方案2】:

首先,在 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

【讨论】:

  • 天哪,我太兴奋了,我以为就是这样。没有。一定有什么我忘记了。非常感谢你的帮助。你今天有空和我一起做一个teamviwer.com,这样你就可以看到我的脚本、代码和屏幕。我真的需要尽快解决这个问题,但它不起作用。
  • 是函数BeGone 在 DOM 构建/加载后调用吗?试试console.log(flash); 看看你的选择器是否工作正常。
【解决方案3】:

对我有用的答案!

我必须添加 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>

我希望这对某人有所帮助。感谢大家的所有出色努力!

【讨论】:

    【解决方案4】:

    这是一个不错的小插件,并简要说明了如何使用它

    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 添加 JavaScript 函数,该函数将在单击按钮后调用 flash 对象

    <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); 
    

    【讨论】:

    • 我想我很接近这一行,但我不知道如何在 flashMethodToCall 的位置添加我的函数。 $('#flashContentABOVE').externalInterface({method:'flashMethodToCall'});
    • 你检查了演示源吗?它在同一页上。这里的要点是给你的 flash 对象一个 id。然后用它来调用你感兴趣的方法。
    • 天哪,我想不通。我得到了 id,但我用来调用该 flash 容器中的 id 和函数的 jQuery 代码是什么?
    • 我已经给出了更详细的答案。我希望你身边的事情不是很清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多