<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-179  評論-666  文章-29  trackbacks-0
    阿里云服務(wù)器優(yōu)惠券
    Flex中As調(diào)用Js的方法是:
         1、導(dǎo)入包 (import flash.external.ExternalInterface;)
         2、使用ExternalInterface.call("Js函數(shù)名稱",參數(shù))進(jìn)行調(diào)用,其返回的值就是Js函數(shù)所返回的值
     
    Js調(diào)用As的方法是:
         1、導(dǎo)入包 (import flash.external.ExternalInterface;)
         2、在initApp中使用ExternalInterface.addCallback("用于Js調(diào)用的函數(shù)名",As中的函數(shù)名)進(jìn)行注冊下
         3、js中 就可以用document.getElementById("Flas在Html中的ID").注冊時設(shè)置的函數(shù)名(參數(shù))進(jìn)行調(diào)用

    as和js通信addcallback失效

    參考原文:http://www.zhaohongri.cn/?p=14

    情況一:flash一旦在瀏覽器里cache住,如果在as里一開始就addcallback就會失效
    情況二:一個js函數(shù)上來就調(diào)用as的一個函數(shù)的時候,頁面會報錯,提示找不到這個flash對象,或者函數(shù)沒有定義。Flash8的時代,針對 ExternalInterface這個類,文檔里只說明了怎么用,而沒有具體說怎么合理的組織和頁面的結(jié)構(gòu),一直到了cs3的時代,幫助里才說明了正確 的函數(shù)注冊和js調(diào)用的過程,具體的見Flash cs3幫助。大概的代碼如下:

    js部分:

               <script>
    var jsReady=false;
    var swfReady=false;

    function isReady(){
    return jsReady;
    }

    function setSwfIsReady(){
          swfReady=true;
       getSWF(”flashobj”).fun()

    }

    function pageInit(){
         jsReady=true;
    }

    function getSWF(movieName) {
       if (navigator.appName.indexOf(”Microsoft”) != -1) {
        return window[movieName+”_ob”];
       } else {
        return document[movieName+”_em”];
       }
    }

    onload=function(){
       pageInit();
    }

    </script>

    注意,在getSWF函數(shù)里用了 return window[movieName+”_ob”]和return document[movieName+”_em”],在IE下,如果object標(biāo)簽和embed表現(xiàn)用同樣的id,通過js去訪問flash對象的時 候,IE會認(rèn)不出,F(xiàn)F是沒有問題的

    as部分

    private function registerJsFun():void{
           if(ExternalInterface.available){
         try{
          var containerReady:Boolean=isContainerReady();
          //ExternalInterface.call(”ceshi”,”registerJsFun:”+containerReady);
          if(containerReady){
           //注冊函數(shù)
           setupCallBacks();
          }else{
           //檢測是否準(zhǔn)備好
           var readyTimer:Timer=new Timer(100);
           readyTimer.addEventListener(TimerEvent.TIMER,timeHandler);
           readyTimer.start();
          }
         }catch(error:Error){
          trace(error)
         }
        }else{
         trace(”External interface is not available for this container.”);
        }
       }
      
    private function timeHandler(event:TimerEvent):void{
    var isReady:Boolean=isContainerReady();
          if(isReady){
       Timer(event.target).stop();
       setupCallBacks();
    }
    }

    private function isContainerReady():Boolean{
    var result:Boolean=Boolean(ExternalInterface.call(”isReady”));
    return result;
    }

    private function setupCallBacks():void{
           ExternalInterface.addCallback(”fun”,fun);

            ExternalInterface.call(”setSwfIsReady”);
         }

    具體我就不解釋了,不明白的可以仔細(xì)去看下cs3幫助,大概的意思就是頁面開始渲染的時候js去調(diào)用swf對象,有可能swf對象沒有完全 load完,所以這個觸發(fā)器要從flash開始,當(dāng)flash加載的時候就開始不停的調(diào)用頁面的一個函數(shù),取一個頁面是否加載完畢的標(biāo)識,當(dāng) pageonLoad后,這個標(biāo)識為true了,說明flash也加載完畢了,這個時候flash再開始注冊函數(shù),同時調(diào)用頁面的js,讓js調(diào)用 Flash對象



    實例:a.mxml

    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
        
    <mx:Script>
            
    <![CDATA[  
          import flash.external.*;
          public function asFunc():String {
              return sending_ti.text;
          }
          
          public function initApp():void {
            //AddCallback方法允許javascript調(diào)用flash時間上函數(shù) 
              ExternalInterface.addCallback("flexFunctionAlias", asFunc);
          }
          
             public function callWrapper():void {      
                 var f:String = "changeDocumentTitle";
           //ExternalInterface.call(functionName:String,Parameters)可以調(diào)用javascript函數(shù)
           //參數(shù)1: functionName – 你想要調(diào)用的javascript函數(shù)名要以字符串的形式
           //參數(shù)2: Parameters – 需要傳遞給javascript函數(shù)的參數(shù),用逗號分開,是可選的。              
                 var getJSValue:String = ExternalInterface.call(f,"New Title");
                 received_ti.text = getJSValue;
            }

            
    ]]>
        
    </mx:Script>
        
    <mx:Button id="send_button" x="368" y="100" click="initApp();" label="發(fā)送" fontSize="12" width="62"/>
        
    <mx:TextInput id="received_ti" x="148" y="62" width="203" fontSize="12"/>
        
    <mx:TextInput id="sending_ti" x="148" y="100" width="203" fontSize="12"/>
        
    <mx:Label x="105" y="65" text="收到" fontSize="12"/>
        
    <mx:Label x="105" y="103" text="發(fā)送" fontSize="12"/>
        
    <mx:Button x="368" y="64" click="callWrapper();" label="接收" fontSize="12" width="62"/>
    </mx:Application>


    index.html

    <!DOCTYPE HTML PUBLIC "-//W3C//Dtd nowrap HTML 4.01 Transitional//EN">
    <html>
    <head>
      
    <base target="_self">
      
    <title></title>
      
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      
    <meta http-equiv="pragma" content="no-cache">
      
    <meta http-equiv="cache-control" content="no-cache">
      
    <meta http-equiv="expires" content="0">
    </head>

    <script language="JavaScript"> 
        
    function callApp() {
            
    var x = MyFlexApp.flexFunctionAlias();
            document.getElementById('receivedField').value 
    = x;
        }

        
    function changeDocumentTitle(a) {
            window.document.title
    =a;
            
    return document.getElementById('sendField').value;
        }
    </script>

    <body style='overflow-x:hidden;overflow-y:hidden'>
      
    <form name="htmlForm">
         數(shù)據(jù)發(fā)送給AS:
        
    <input type="text" id="sendField" />
        
    <input type="button" value="發(fā)送" onclick="" /><br />
        
    <br />
        接收AS的數(shù)據(jù):
        
    <input type="text" id="receivedField">
        
    <input type="button" value="接收" onclick="callApp();" /><br />    
      
    </form>
       
    <OBJECT id="MyFlexApp" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="100%" HEIGHT="500">
          
    <PARAM NAME=movie VALUE="joinJS.swf">
          
    <PARAM NAME=quality VALUE=high>
          
    <PARAM NAME=scale VALUE=noborder>
          
    <PARAM NAME=bgcolor VALUE=#000000>
          
    <EMBED src="joinJS.swf" quality=high WIDTH="100%" HEIGHT="500" scale=noborder bgcolor=#000000 NAME="TH2"TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
       
    </OBJECT>
    </body>



    阿里云服務(wù)器優(yōu)惠券
    posted on 2009-06-27 10:32 Alpha 閱讀(26665) 評論(4)  編輯  收藏 所屬分類: jQuery JavaScript Flex

    評論:
    # re: AS與JS相互通信(Flex中調(diào)用js函數(shù)) 2012-08-24 16:17 | 小小程編
    謝謝 正需要呢 在學(xué)習(xí)這個地方 好多地方的帖子都不成功 贊一個  回復(fù)  更多評論
      
    # re: AS與JS相互通信(Flex中調(diào)用js函數(shù))[未登錄] 2012-10-08 16:11 | 葉子
    感謝博主的分享  回復(fù)  更多評論
      
    # re: AS與JS相互通信(Flex中調(diào)用js函數(shù))[未登錄] 2013-05-07 22:19 |
    你好。 我剛開始使用Flex 對于這個不熟。 能不能告訴我下, 這樣相互通信的話。 需要配置那些地方? 因為我按照你這個寫 調(diào)用不了。  回復(fù)  更多評論
      
    # re: AS與JS相互通信(Flex中調(diào)用js函數(shù)) 2013-11-22 12:48 | laipeng
    這個addCallBack為什么只能在IE中有用啊,其他瀏覽器都沒有用 這個兼容的問題好像不好解決呢,看了很多這方面的資料都不能解決。  回復(fù)  更多評論
      
    主站蜘蛛池模板: 亚洲av无码一区二区三区四区 | 91视频免费观看| 久久久久久亚洲精品| 无码国产精品一区二区免费| 国产亚洲精品第一综合| 久久精品国产亚洲夜色AV网站| 日本在线高清免费爱做网站| 美女免费视频一区二区| 亚洲成人在线电影| 国产男女猛烈无遮挡免费视频| 思思久久99热免费精品6| 亚洲视频在线观看免费视频| 日韩在线免费看网站| 国产自国产自愉自愉免费24区| 亚洲免费视频网址| 中文字幕亚洲日本岛国片| 美女视频黄的全免费视频| 国产V片在线播放免费无码| 激情亚洲一区国产精品| 亚洲精品亚洲人成人网| 97人伦色伦成人免费视频| 国产99视频精品免费视频76| 亚洲精品天堂在线观看| 亚洲AV永久无码精品| 日本免费高清一本视频| 96免费精品视频在线观看| 免费福利资源站在线视频| 亚洲性一级理论片在线观看| 国产亚洲情侣一区二区无码AV| 在线A级毛片无码免费真人| 午夜影院免费观看| 一个人看的www在线免费视频| 亚洲AV成人噜噜无码网站| 亚洲av最新在线网址| 免费人成激情视频| 国产在线观看片a免费观看| 99在线免费视频| 一级做a爱过程免费视| 亚洲AV无码一区二区一二区| 亚洲精品网站在线观看你懂的| 亚洲综合无码AV一区二区|