日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Flex與JS交互完全攻略

 Sky-Cool 2013-01-12

Flex與JS交互完全攻略

轉自http://www./?p=47

Flex與JS交互推薦用ExternalInterface,它可以讓JS和AS互相調用其中函數(shù),傳遞所有可接受的參數(shù)甚至是一些復雜的對象。Flex編譯生成的文件是swf,其本質還是Flash,所以Flash能使用的通信方式,完全適用于Flex。幾年前大家經常用fscommand與Flash的外部容器交互,此方法早已不適用。

在網頁中嵌入swf很簡單,但要保證其最好的交互性、數(shù)據的正確性是比較花費精力的,推薦使用SWFObject來嵌入FLASH??催^例子中你就會發(fā)現(xiàn)這些方式已經完全夠用,所以才叫“完全手冊”,本文用最簡潔的語言描述,重點介紹數(shù)據傳輸。

 先看演示:

最簡辦法——URL變量

http:///swf/TestLoaderinfo.swf?id=123&name=lukia&site=

通過帶參數(shù)的URL訪問SWF

這樣寫的好處是明顯、直觀,但數(shù)據量大了,可能會有問題,IE的最大URL長度限制是2083字節(jié),而實際可以使用的最大長度為2048字節(jié)。所以有些問題可以交給JS處理。

http:///swf/index.html?id=123&name=lukia&site=

這次再點擊按鈕“Show JS Object”,就可以調用JS中的函數(shù),把它的對象讀進來了。

再看代碼:

代碼下載地址 http://www./wp-content/uploads/2009/02/flashvars.rar

以下是Flex代碼:

 <?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml” layout=”vertical”
 creationComplete=”init()” applicationComplete=”showParams()”>
 <mx:Script>


  <![CDATA[

  import mx.controls.Alert;

  import mx.rpc.xml.SimpleXMLDecoder;

   

  [Bindable]

  private var flashvars:String = “”;//保存所有傳入變量的名稱及變量值

  [Bindable]

  private var jsObjvars:String = “”;//保存JS中對象中的名稱及變量值

   

  private function init():void{

  ExternalInterface.addCallback(”paserXML”,paserXML);

  ExternalInterface.call(”swfLoadedHandler”);

  }

  private function showParams():void{

  var info:Object = Application.application.loaderInfo.parameters;

  flashvars = “”;

  for(var varName:String in info){

  flashvars += “name:”+varName+”\t\t value: “+info[varName]+”\n”;

  }

  }

   

  private function paserXML(xmlstr:String):Object{

  //新建一個XML解析器

  var xmlDecoder:SimpleXMLDecoder = new SimpleXMLDecoder();

  //解析器的decodeXML方法可以將XMLDocument轉化為Object

  var obj:Object = xmlDecoder.decodeXML(new XMLDocument(xmlstr));

  return obj;

  }

  private function showJSObject():void{

  var obj:Object = ExternalInterface.call(”getJSObject”);//調用JS中函數(shù)

  jsObjvars = “”;

  for(var varName:String in obj){

  jsObjvars += “name:”+varName+”\t\t value: “+obj[varName]+”\n”;

  }

  }

  ]]>

 </mx:Script>

 <mx:Button click=”showParams()” label=”Show Variables”/>

 <mx:TextArea text=”{flashvars}” width=”500″ height=”150″/>

 <mx:Button click=”showJSObject()” label=”Show JS Object”/>

 <mx:TextArea text=”{jsObjvars}” width=”500″ height=”150″/>

</mx:Application>

 loaderInfo這個屬性,只有被加載的SWF, JPEG, GIF, PNG才有。
而這個Application 本身就是一個SWF。所以有加載器信息。可以外部容器給它傳參數(shù)。
測試的方法很多。我一開始用傲游在本地測試,不成功,費了好長時間。。。
后來拿FF本地測試可以。
之后放在服務器上,所有的瀏覽器都可以了。。。

以下是JS代碼:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www./TR/xhtml1/DTD/xhtml1-transitional.dtd“>
<html xmlns=”http://www./1999/xhtml“>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>test</title>
<script type=”text/javascript” src=”swfobject.js”></script>
<script language=”JavaScript” type=”text/javascript”>
/*
 //如果只有一個參數(shù),就用這個。
 function getParameter(){
  var url=window.location .href;
  var aa=url.indexOf(’=');
  
  if (aa == -1)
  return “”;
  url=url.substring(aa+1);
  alert(url.substring(aa+1));
 }
*/
 // 如果有多個參數(shù),就用這個函數(shù)。param 為 參數(shù)的名稱
 function getParameter(param){
  var query = window.location.search;
  var iLen = param.length;
  var iStart = query.indexOf(param);
  if (iStart == -1)
  return “”;
  iStart += iLen + 1;
  var iEnd = query.indexOf(”&”, iStart);
  if (iEnd == -1)
  return query.substring(iStart);
  return query.substring(iStart, iEnd);
 }
 function getJSObject(){//構造一個復雜對象傳給Flex
  var obj = new Object();
  obj.oid = 12;
  obj.arr = ["a","b","c"];
  obj.name = “an Object”;
  return obj;
 }
function thisSWF(swfID){//這個函數(shù)
  if (navigator.appName.indexOf(”Microsoft”) != -1) {
  return window[swfID];
  } else {
  return document[swfID];
  }
 }
 
 function swfLoadedHandler(){//JS處理XML的能力不強,我想把它轉換成Object??梢钥縁lex來實現(xiàn)
  var xmlStr=”<sites><site name=’adobe.com’ id=’0′/><site name=’’ id=’2′/><site name=’sf.net’ id=’3′/></sites>”;
  var obj = thisSWF(”mySWF”).paserXML(xmlStr);
  debugger
  alert(obj);
 }
 
 alert(getParameter(”id”));
 //alert(getParameter(”id”)+getParameter(”name”));//這樣可以取到某個特定的變量值
 //swfobject.embedSWF(”TestLoaderinfo.swf“, “mySWF”, “100%”, “100%”, “9.0.0″);//不加參數(shù)只加載SWF
 //swfobject.embedSWF(”TestLoaderinfo.swf?id=”+getParameter(”id”)+”", “mySWF”, “100%”, “100%”, “9.0.0″);//取得某些參數(shù)
 swfobject.embedSWF(”TestLoaderinfo.swf”+window.location.search, “mySWF”, “100%”, “100%”, “9.0.0″);
</script>
<style type=”text/css” media=”screen”>
 html, body, #mySWF { height:100%; }
 body { margin:0; padding:0; overflow:hidden; }
</style>
</head>
<body style=”margin:0px;padding:0px;”>
<div id=”mySWF”>
<h1>您需要更新Flash Player</h1>
<p><a href=”http://www.adobe.com/go/getflashplayer“>取得新版Flash
Player</a></p>
</div>


</body>
</html>

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多