代码之家  ›  专栏  ›  技术社区  ›  Mark

Javascript到flash通信

  •  8
  • Mark  · 技术社区  · 16 年前

    我正在使用mootools 1.2.1中的Swiff.remote调用actionscript函数,即:

    Swiff.remote(playSwf.toElement(), 'sendResult', result, plays, name);
    

    在FireFox、Safari和Opera中,这一切都很好,但在InternetExplorer6和7中,我遇到了一个“未指明”的错误。 我试过使用沼泽标准:

    window['flash'].sendResult(result, plays, name);
    

    无济于事。

    谢谢你的帮助。 作记号

    6 回复  |  直到 16 年前
        1
  •  5
  •   picardo    16 年前

    我不熟悉Swiff插件,但是从Javascript调用flash函数不需要插件。更容易在本地完成。

    发件人:

    //1. calling javascript function from Flash.
    ExternalInterface.call("sendData",tempStr);
    // argument 1: javascript function, argument 2: data/variables to pass out.
    //2. calling javascript function from Flash with recursion.
    var returnValue:String = ExternalInterface.call("sendReturn",tempStr).toString();
    //3. setting up a callback function for javascript
    ExternalInterface.addCallback("callFlash",flashResponse);
    // argument 1: function name called by javascript, argument 2: function on the Flash side.
    // AS2 version looks like this : ExternalInterface.addCallback("callFlash",null,flashResponse);
    

    来自JS:

    //1. javascript function as called from Flash.
    function sendData(val){
        alert(val);
        document.flashForm.flashOutput.value = val;
    }
    
    //2. javascript function with recursion.
    function sendReturn(val){
        var tempData = "Hello from JS";
        return tempData + ' :return';
    }
    
    //3. calling Flash function with javascript.
    function sendToFlash(val){
        window['flash'].callFlash(val);
    }
    
        2
  •  2
  •   picardo    16 年前

    啊,这是你问题的答案。

    <form>
        <input type="button" onclick="callExternalInterface(id)" value="Call ExternalInterface" />
    </form>
    <script>
    function callExternalInterface(id) {
        thisMovie("externalInterfaceExample").callAS(id);
    }
    
    function thisMovie(movieName) {
        if (navigator.appName.indexOf("Microsoft") != -1) {
            return window[movieName]
        }
        else {
            return document[movieName]
        }
    }
    </script>
    

    因此,如果客户端是Internet Explorer,则应该从document对象获取电影。:-)

        3
  •  0
  •   discorax    16 年前

    想把这个答案贴出来 可以 为别人制造麻烦,显然这不是你的麻烦。仍在为你的问题寻找解决方案。

    http://mootools.net/docs/Utilities/Swiff 注:

    动作脚本2.0

    import flash.external.*;
    

    动作脚本3.0

    package com
    {
       import flash.external.ExternalInterface;
       public class Main 
       {
       }
    }
    
        5
  •  0
  •   digitarald    16 年前

    您可以直接调用它:

    playSwf.remote('sendResult', result, plays, name)
    

    sendResult 必须在 ExternalInterface.addCallback() 在AS代码中

    下面是一个例子 github repository (fancyupload) :as3proj包含AS源,JS远程调用位于 Swiff.Uploader.js下载程序

        6
  •  0
  •   Tze-chiu Lei Tze-chiu Lei    15 年前

    如果您的代码在除Internet Explorer之外的所有浏览器中都能工作,那么很有可能是因为IE的Flash播放器是ActiveX插件。我在某个地方读到ActiveX以.NET格式进行通信,而Flash的外部API以XML格式进行通信。

    我也在尝试在InternetExplorer上学习JavaScriptFlash通信,所以我会让你们知道我学到了什么。