`
ch_kexin
  • 浏览: 899293 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

AS3和JS互相调用的小技巧 【一】

 
阅读更多
我对chm帮助手册小解:
选择“文件”>“新建”>“ActionScript 项目”菜单选项。
对于“项目名称”,提供主类的名称(例如:ExternalInterface)。
Flex Builder 将基于 ActionScript 项目模板创建一个 ActionScript 文件。擦除该文件中的所有默认模板内容。
将整个示例(包括包和 import 语句)粘贴到该 ActionScript 文件中。
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);
            }
        }
    }
}


使用“运行”或“调试”命令测试示例。我们会在项目ExternalInterfaceExample/bin-debug/目录下找到相应的 ExternalInterfaceExample.swf.


为了测试前面的 ActionScript 代码,我们写一个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>

将“ExternalInterfaceExample.swf”,和HTML页面放在同一目录下,运行页面,进行测试

小注:
这是HTML页面加载flash:
<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>

这是AS3调用JS:
ExternalInterface.call("sendToJavaScript", input.text);

分享到:
评论

相关推荐

    Flex中的小技巧备忘

    ### Flex中的小技巧备忘 在Flex开发过程中,掌握一些实用的小技巧可以帮助开发者更高效地完成项目,并提高代码质量。本文将详细介绍四种与Flex相关的实用技巧。 #### 技巧一:复制文本到剪贴板 在某些场景下,...

    javascript操作ps

    本文档旨在详细介绍如何利用JavaScript来操作Adobe Photoshop CS6,并提供一些实用案例和技巧。 #### 二、JavaScript在Photoshop中的基础概念 ##### 2.1 脚本环境 Adobe Photoshop CS6为JavaScript提供了丰富的API...

    【JavaScript源代码】React 小技巧教你如何摆脱hooks依赖烦恼.docx

    ### React小技巧:结合`useState`与`useRef`应对Hooks依赖烦恼 #### 场景描述 在React项目中,经常遇到如下代码片段: ```javascript const [watchValue, setWatchValue] = useState(''); const [otherValue1, ...

    as3-video-test:我的 AS3 视频小测试的存储库

    这个“as3-video-test”项目显然是一个使用AS3进行视频处理的测试仓库,可能包含了作者在探索如何在Flash环境中播放、控制和操作视频文件时的一些实验代码和示例。 在AS3中,视频相关的操作主要通过`flash.media....

    greensock开发包(全)

    绿袜(GreenSock)开发包,全称为GreenSock Animation Platform,是专为AS3(ActionScript 3)设计的一款强大的动画库。这个压缩包包含了所有关于GreenSock AS3缓动功能的相关资源,使得开发者能够轻松地创建出流畅...

    javascript中关于&& 和 || 表达式的小技巧分享|javascript-70265.pdf

    总结,理解并熟练运用 `&&` 和 `||` 的这些小技巧,可以帮助你写出更简洁、可读性更强的JavaScript代码。它们在处理默认值、条件判断以及简化逻辑流程等方面都能发挥重要作用。在日常编程中,这些技巧尤其适用于函数...

    PHP小技巧之JS和CSS优化工具Minify的使用方法

    合并和压缩JavaScript(JS)及层叠样式表(CSS)文件是实现这一优化的有效策略。本文将介绍如何使用PHP实现多个JS和CSS文件的合并与压缩,以及如何使用名为Minify的开源工具来达到相同的目的。 ### PHP实现合并和...

    JavaScript调试技术(二).doc

    在本例中,我们使用的环境是MyEclipse 5.5,这是一个功能强大的Java集成开发工具,同时也支持JavaScript的开发和调试。与之配合的是Tomcat 5.0,一个流行的Java应用服务器,用于部署和运行Web应用。 调试JavaScript...

    几个 ASP.NET 小技巧

    本文将介绍两个 ASP.NET 开发中的实用小技巧:如何使用 JavaScript 调用服务器端的方法,以及如何在 GridView 编辑状态下获取单元格的值。 首先,让我们来看一下如何用 JavaScript 调用 ASP.NET 服务器端的方法。在...

    Javascript调试之console对象——你不知道的一些小技巧

    综上所述,掌握这些`console`对象的小技巧,不仅可以提升我们的调试效率,还能使我们编写出更高效、更可维护的JavaScript代码。在实际工作中,善用这些方法能够极大地提高开发和调试的质量。希望本文能帮助到各位...

    ActionScript3.0开发人员指南

    影片剪辑是Flash和AS3中的一个重要组成部分,用于组织和控制动画序列。 - **影片剪辑基础知识**:概述影片剪辑的基本概念,包括如何在时间线上安排帧和动作。 - **使用MovieClip对象**:教授如何使用`MovieClip`类...

    ASP.NET 小技巧(2个)

    ### 技巧一:JavaScript调用服务器端方法 在ASP.NET AJAX环境中,有时我们需要在客户端的JavaScript中触发服务器端的方法执行。常规的PageMethod虽然方便,但静态方法无法访问当前页面的控件状态,限制了其实用性。...

    微信小程序实训视频-2.rar

    3. **小游戏框架与语法**:微信小游戏采用JavaScript语言,并提供了特定的小游戏框架,如WXML和WXSS用于界面布局,JSBridge用于微信API调用。学习者需要掌握这些框架的语法和特性。 4. **小游戏设计与策划**:了解...

    Powershell小技巧之使用Jint引擎在PowerShell中执行Javascript函数

    这里演示如何利用PowerShell将一段Javascript函数字符串交给Jint引擎去执行。 执行Javascript函数 .Net版的Javascript解释器 可以从Git上获取Jint的代码,也可以从nuget上下载Jint的程序集。 Jint是一个面向.Net的...

    py3echartsV1.zip

    《Python3.7与PyEcharts V1:高效可视化实践》 在数据分析和科学计算领域,数据可视化是一项至关重要的技能,它能帮助我们更直观...通过不断学习和实践,我们可以掌握更多高级技巧,提升数据可视化的艺术性和实用性。

    zhuzhuangtu.rar_柱状图

    3. 调用`plt.bar()`函数绘制柱状图,传入类别和数值的数组。 4. 添加轴标签和标题:`plt.xlabel()`, `plt.ylabel()`, `plt.title()` 5. 显示图形:`plt.show()` 如果"www.pudn.com.txt"是源代码,读者可以通过阅读...

    Flex试题 .txt

    前者主要用于调用JavaScript函数,后者则用于在AS之间传递消息。 ### 29. 是否使用Flex的国际化功能,其优势和使用方式,以及为什么需要使用它? 国际化功能使Flex应用能够适应不同的语言和文化环境,优势包括增强...

    基于Autojs 京东一键自动退货脚本

    6. **悬浮运行脚本按钮**:悬浮运行脚本按钮.js可能是一个实现脚本始终在屏幕上的悬浮小部件,让用户随时触发退货流程。创建悬浮按钮,监听其点击事件,然后执行退货脚本。 ```javascript var悬浮按钮 = new ...

Global site tag (gtag.js) - Google Analytics