论坛首页 编程语言技术论坛

AS 与 js 交互示例

浏览 3860 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-02-10   最后修改:2010-02-10
ActionScript/Flash代码

package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.external.ExternalInterface;
	import flash.text.TextField;
	import flash.utils.Timer;
	import flash.text.TextFieldType;
	import flash.text.TextFieldAutoSize;

	public class ExternalInterfaceExample extends Sprite {
		private var input:TextField;
		private var output:TextField;
		private var sendBtn:Sprite;

		public function ExternalInterfaceExample() {
			input = new TextField();
			input.type = TextFieldType.INPUT;
			input.background = true;
			input.border = true;
			input.width = 350;
			input.height = 18;
			addChild(input);

			sendBtn = new Sprite();
			sendBtn.mouseEnabled = true;
			sendBtn.x = input.width + 10;
			sendBtn.graphics.beginFill(0xCCCCCC);
			sendBtn.graphics.drawRoundRect(0, 0, 80, 18, 10, 10);
			sendBtn.graphics.endFill();
			sendBtn.addEventListener(MouseEvent.CLICK, clickHandler);
			addChild(sendBtn);

			output = new TextField();
			output.y = 25;
			output.width = 450;
			output.height = 325;
			output.multiline = true;
			output.wordWrap = true;
			output.border = true;
			output.text = "Initializing...\n";
			addChild(output);

			if (ExternalInterface.available) {
				try {
					output.appendText("Adding callback...\n");
					ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript);
					if (checkJavaScriptReady()) {
						output.appendText("JavaScript is ready.\n");
					} else {
						output.appendText("JavaScript is not ready, creating timer.\n");
						var readyTimer:Timer = new Timer(100, 0);
						readyTimer.addEventListener(TimerEvent.TIMER, timerHandler);
						readyTimer.start();
					}
				} catch (error:SecurityError) {
					output.appendText("A SecurityError occurred: " + error.message + "\n");
				} catch (error:Error) {
					output.appendText("An Error occurred: " + error.message + "\n");
				}
			} else {
				output.appendText("External interface is not available for this container.");
			}
		}
		private function receivedFromJavaScript(value:String):void {
			output.appendText("JavaScript says: " + value + "\n");
		}
		private function checkJavaScriptReady():Boolean {
			var isReady:Boolean = ExternalInterface.call("isReady");
			return isReady;
		}
		private function timerHandler(event:TimerEvent):void {
			output.appendText("Checking JavaScript status...\n");
			var isReady:Boolean = checkJavaScriptReady();
			if (isReady) {
				output.appendText("JavaScript is ready.\n");
				Timer(event.target).stop();
			}
		}
		private function clickHandler(event:MouseEvent):void {
			if (ExternalInterface.available) {
				ExternalInterface.call("sendToJavaScript", input.text);
			}
		}
	}
}





JS/HTML代码

<!-- saved from url=(0014)about:internet -->
 <html lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>ExternalInterfaceExample</title>
 <script language="JavaScript">
     var jsReady = false;
     function isReady() {
         return jsReady;
     }
     function pageInit() {
         jsReady = true;
         document.forms["form1"].output.value += "\n" + "JavaScript is ready.\n";
     }
     function thisMovie(movieName) {
         if (navigator.appName.indexOf("Microsoft") != -1) {
             return window[movieName];
         } else {
             return document[movieName];
         }
     }
     function sendToActionScript(value) {
         thisMovie("ExternalInterfaceExample").sendToActionScript(value);
     }
     function sendToJavaScript(value) {
         document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
     }
 </script>
 </head>
 <body onload="pageInit();">
 
     <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
             id="ExternalInterfaceExample" width="500" height="375"
             codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
         <param name="movie" value="ExternalInterfaceExample.swf" />
         <param name="quality" value="high" />
         <param name="bgcolor" value="#869ca7" />
         <param name="allowScriptAccess" value="sameDomain" />
         <embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"
             width="500" height="375" name="ExternalInterfaceExample" align="middle"
             play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
             type="application/x-shockwave-flash"
             pluginspage="http://www.macromedia.com/go/getflashplayer">
         </embed>
     </object>
 
     <form name="form1" onsubmit="return false;">
         <input type="text" name="input" value="" />
         <input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br />
         <textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea>
     </form>
 
 </body>
 </html>



说明:
在Flash的输入框中输入信息,点击发送,可以在flash页面上显示出来;
在HTML的输入框中输入信息,点击发送,可以在Flash的文本框中显示出来


论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics