• 爱你不容易——ExternalInterface



    ExternalInterface是什么?

         ExternalInterface 类是Flash Player 8 以后提供的一个外部 API,在功能上与 fscommand()、CallFrame() 和 CallLabel() 方法相似,用来进行Javascript和Actionscript之间的通讯,这是官方推荐使用的类,相比前述三个方法,它更灵活、更通用。

    通过这个类,as可以调用 HTML 页的js,同时传递任何数据类型的任意数量的参数,并可以接收调用的返回值;反过来,HTML 页上的 js,也可以调用 Flash 中的 as 函数。as 函数可以返回一个值,js会立即接收它作为该调用的返回值。详细使用方法在Flash的帮助中有详细讲述。

    使用ExternalInterface时的"flash_id"未定义错误

         但是在使用这个类时,会出现问题,你满心欢喜而去,郁闷而归,虽然问题解决了,但是心有余悸,就象吃瓜子把皮卡喉咙一样,要想使用ExternalInterface不报"flash_id"未定义(flash_id即htm中插入swf文件的Object的id),有下边三个方法:

    1、加一个<form></form>在你嵌套flash的form里的<form>标记后面

    <form><form></form>
    //这里是你的flash代码内容。
    </form>

    2、添加如下JS在你的flash之前:

    <script type="text/javascript"> 
    function ExternalInterfaceManager() 

          
    this.registerMovie = function(movieName) 
              
    if(!window.fakeMovies) window.fakeMovies = new Array(); 
              window.fakeMovies[window.fakeMovies.length] 
    = movieName; 
          }
     
          
    this.initialize = function() 
              
    if(document.all) 
              

                  
    if(window.fakeMovies) 
                  

                      
    for(i=0;i<window.fakeMovies.length;i++
                      

                          window[window.fakeMovies[i]] 
    = new Object(); 
                      }
     
                      window.onload 
    = initializeExternalInterface; 
                  }
     
              }
     
      
          }
     
    }
     
    function initializeExternalInterface() 
          
    for(i=0;i<window.fakeMovies.length;i++
              
    var movieName = window.fakeMovies[i]; 
              
    var fakeMovie = window[movieName]; 
              
    var realMovie = document.getElementById(movieName); 
      
              
    for(var method in fakeMovie) {             
                  realMovie[method] 
    = function() {flashFunction = "<invoke name=\"" + method.toString() + "\" returntype=\"javascript\">" + __flash__argumentsToXML(arguments, 0+ "</invoke>";this.CallFunction(flashFunction);} 
              }
     
      
              window[movieName] 
    = realMovie; 
          }
     
    }
     
    var eim = new ExternalInterfaceManager(); 
    eim.registerMovie(
    "flash_id"); 
    eim.initialize(); 
    </script> 

    其中eim.registerMovie("flash_id"); 中的flash_id为你的swf的ID。

    3、还有一个方法,就是将flash放在form标记之外;

    这个问题在官方livedocs有人反馈,但不知Flash 9中是否解决。

  • 相关阅读:
    base64加密后字符串长度
    Mysql如何查字段的长度,Mysql中length()、char_length()的区别
    Java 逆变与协变的名词说明
    Java 泛型在实际开发中的应用
    MySQL自增主键排序问题
    【python基础】怎么实现装饰器?
    【python基础】列表推导式
    【python】爬虫实践项目(一):39问医生
    关于DRF序列化器模型字段参数设置报错AssertionError: May not set both `read_only` and `write_only`
    DRF学习笔记
  • 原文地址:https://www.cnblogs.com/yao/p/803003.html
Copyright © 2020-2023  润新知