`
gavin
  • 浏览: 83590 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

ActionScript3注入JavaScript脚本

阅读更多
ActionScript3注入JavaScript脚本
JavaScript and VBScript Injection in ActionScript 3主要内容摘抄

脚本注入在这里是说在ActionScript3编程时更好的组织和使用JavaScript,不是黑客攻击做的那个。通过ActionScript3的ExternalInterface类完成,需要了解JavaScript和文档对象模型( DOM )。

简介
比如说现在用ActionScript3通过socket取数据,然后以JavaScript写到页面上去(我不想用FLEX组件了),这时会用很多现成js组件库,还有自己写的js组件扩展,如何更好的管理它们呢?

通过ActionScript3注入脚本提供以下好处:

服务器独立:JavaScript编译到SWF文件里了,相对于使用了一个swf,它要用的js文件在另一台服务器上,升级等一些事情会省心。
脚本代码保密 :JavaScript存储在SWF内,不像通常那样直接被看到源代。
透明 :通过适当的编写,只在用到时注入,不用时回收,节约资源。匿名运行,不会影响已有js, 除非你想。
运行脚本的修改 :脚本就像字符串参数一样,在运行时根据具体需求改变。
压缩 :JavaScripts可利用SWF压缩:例如一个32K的JavaScript文件时,存储在SWF里只有5K 。
对于需要Flash/的Flex与JavaScript交互的用户,这是一个不错的解决方案。

AS3脚本注入基础,这是一些常见用法
ExternalInterface.call("alert", "foo")

ExternalInterface.call("alert('foo')")

ExternalInterface.call("function(){alert('foo'); alert('bar');}")

var js:String = "function(){function myFunc(str){alert(str);};myFunc(Foobar);}";
ExternalInterface.call(js)

原来我以为http://code.google.com/p/flex-iframe/这外开源项目用的已经很好了。
还有更好的:用XML在AS3中嵌入JavaScript

import flash.external.ExternalInterface;
var myJavaScript:XML =
<script>
    <![CDATA[
        function(){
            var Foobar = 'foo';
            function myFunc(str){
                alert(str);
            };
            myFunc(Foobar);
        }
    ]]>
</script>
ExternalInterface.call(myJavaScript); 这样写JS漂亮多了。

下面是一些更深入的研究,我没试过,从原文抄来的。

import flash.external.ExternalInterface;
var myJavaScript:XML=
    <script>
        <![CDATA[
            function(){

                // 本地变量
                var myLocal = 'foo';

                // 全局变量
                myGlobal = 'bar';
            }
        ]]>
</script>;

因为“var”被省略,myGlobal变成全局的,可以改变网页上js文件里写的一些变量值了。

import flash.external.ExternalInterface;
var myJavaScript :XML =
    <script>
        <![CDATA[
            function(){

                // 命名的本地函数,不保存
                function myLocalFunction(){
                    alert('foo');
                }

                // 匿名的本地函数,不保存
                var myOtherLocalFunction = function(){
                    alert('bar');
                }

                // 全局函数,可能会覆盖原有函数
                myGlobalFunction = function(){
                    alert('Yo global dude!');
                }
            }
        ]]>
    </script>
方法和变量效果一样,下面两者结合的例子:

import flash.external.ExternalInterface;
var myJavaScript :XML =
    <script>
        <![CDATA[
            function(){
                var snafu = 'You said';
                // "Dojo"是被其它脚本创建的全局对象,
                // 确认它存在再赋值,避免抛出异常.
                // myVar和myFunction会存在对象 "Dojo"中,直到明确摧毁。
                if(Dojo){
                    Dojo.myVar = 'foo';
                    Dojo.myFunction = function (str) {
                        alert(snafu + ":" + str);
                    }
                };
            }
        ]]>
    </script>
ExternalInterface.call(myJavaScript);

这个XML定义函数被销毁,它保存的变量还在,是一种维护状态的方法,但是要小心内存泄漏和覆盖另一个脚本。
我们增加了一个新的全局方法,ExternalInterface.call(" Dojo.myFunction","你好") ,将获得一个警告框说: "You said:你好。"

发送参数和返回值:
import flash.external.ExternalInterface;
var myJavaScript :XML =
    <script>
        <![CDATA[
            function(myFoo){
                function myFunc (str){
                    return str.toUpperCase()
                };
                var anonResult = myFunc(myFoo);
                return anonResult;
            }
        ]]>
    </script>
var myResult = ExternalInterface.call(myJavaScript , "foobar");
// myResult is "FOOBAR"

就到这了,如果你关心VBScript,请看原文。
分享到:
评论
2 楼 gavin 2009-11-26  
一个完整的示例,这个里边js简单些,我曾经把整个mootools放个as里,几千行,原封放进去没问题。
文件asjs.as
package {
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.external.ExternalInterface;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;

	public class asjs extends Sprite
	{
        private var label:TextField;
        private var labelText:String = "click me ...click me";

        public function asjs() {
            configureLabel();
			if(!Table_JavaScript.called){
				ExternalInterface.call(Table_JavaScript.CODE);
				Table_JavaScript.called = true;
			}
        }

        private function configureLabel():void {
            label = new TextField();
            label.autoSize = TextFieldAutoSize.LEFT;
            label.background = true;
            label.border = true;
            var format:TextFormat = new TextFormat("宋体");
            format.color = 0xFF0000;
            format.size = 20;
			label.addEventListener(MouseEvent.CLICK,cc);
            label.defaultTextFormat = format;
            addChild(label);
            label.text = labelText;
        }
		private function cc(event:Event):void
		{
			ExternalInterface.call("eb.createTable","footer");
		}
	}
}
class Table_JavaScript
{
	public static var called:Boolean = false;
	public static const CODE : XML = 
	<script><![CDATA[
		function()
		{
			if(typeof eb == "undefined" || !eb)	
			{
				eb = {};
			}
			eb.createTable = function(frameID) 
			{
				var dd = '<div id="_layeright" align="right" style="-moz-opacity:0.5; filter:alpha(opacity=50);position:absolute; right:5px; top:0px; width:200px; height:25px; z-index:99">';
				dd += 'create by flash';
				dd += '</div>';
				document.getElementById(frameID).innerHTML=dd;
			}
		}
	]]></script>;
}

在html页面里放一个 <div id="footer" class="clearfix">change</div> 可以看到效果
1 楼 vii779 2009-08-26  
脚本代码保密是不可能的,swf照样可以反编译。

相关推荐

    javascript与actionscript的交互.[课件]

    JavaScript 和 ActionScript 是两种在 Web 开发中广泛使用的脚本语言,它们分别在浏览器环境(JavaScript)和 Adobe Flash 平台(ActionScript)上运行。虽然它们语法上有许多相似之处,但它们的应用场景和交互方式...

    ActionScript

    ActionScript是一种基于ECMAScript(JavaScript的标准化版本)的编程语言,主要被应用于Adobe Flash平台,用于创建交互式内容、富互联网应用(RIA)以及动画。在标题"ActionScript"中,我们可以理解这是关于这个编程...

    avi6,swf注入工具

    ActionScript是SWF文件中执行逻辑的关键,它是基于ECMAScript的一个方言,类似于JavaScript。通过使用“avi6,swf注入工具”,开发者可以编辑ActionScript代码,从而改变SWF文件的动态行为,例如增加交互性、改进...

    flex-javascript-component:将 javascript 代码(来自 flex 应用程序)注入 HTML 容器(主机)页面的 Flex (MXML) 组件

    1. **注入JavaScript代码**:组件允许开发人员将JavaScript函数或代码块直接注入到宿主HTML页面的DOM中。这可以是单个函数调用,也可以是一段复杂的逻辑,取决于具体的需求。 2. **调用HTML DOM方法**:通过这个...

    AS3与JaveScript之间的通讯视频讲解

    AS3(ActionScript 3)和JavaScript是两种广泛用于网页开发的编程语言,它们各自有着不同的应用场景和优势。在Web开发中,有时需要在Flash内容(由AS3编写)和HTML页面(通常包含JavaScript)之间进行交互,以实现更...

    跨站攻击原理+攻击实例

    3. 启用Content Security Policy(CSP)以限制浏览器加载的资源类型和来源,减少恶意脚本的执行可能。 4. 保持应用和库的更新,修复已知的安全漏洞。 总的来说,跨站攻击是一种严重的威胁,需要开发者和网站管理员...

    ASP源码—追梦3Dflash相册管理系统 1.0.zip

    6. **安全控制**:通过验证用户输入,防止SQL注入、跨站脚本攻击等,确保系统的安全性。 7. **错误处理**:使用On Error语句进行错误捕获和处理,提高程序的稳定性和用户体验。 由于提供的文件名称列表只包含一个...

    ASP实例开发源码—3D方块Flash网站管理系统 asp版.zip

    4. **Flash集成**:学习如何将Flash与ASP结合,可能涉及到Flash ActionScript与服务器端脚本的通信,如使用ExternalInterface或XMLSocket进行数据交换。 5. **网页布局与设计**:3D方块效果涉及CSS3和可能的...

    flash as3+php+mysql留言板

    AS3(ActionScript 3)是Adobe Flash平台上的编程语言,用于实现动态内容和交互性;PHP是一种服务器端脚本语言,常用于处理网页中的数据和逻辑;而MySQL则是常用的开源关系型数据库管理系统,用于存储和管理用户留言...

    网页设计与开发技术

    在描述中提到的动态部分可能指的是利用JavaScript或其他客户端脚本语言增强用户体验。例如,可以使用AJAX(Asynchronous JavaScript and XML)技术实现无刷新的登录验证,即在用户提交表单时,后台验证结果通过JSON...

    基于PHP的3DFLASHphp相册CMS系统源码.zip

    3. **Flash技术**:虽然现代Web已较少使用Flash,但理解ActionScript(Flash的编程语言)和Flash组件的使用是必要的,可能涉及到3D展示或动态交互元素。 4. **CMS架构**:了解内容管理系统的原理,如用户权限管理、...

    ASP源码—flash ASP个人主页系统 修改版.zip

    Flash的内容可以通过ActionScript编程语言控制,ActionScript是一种基于ECMAScript的脚本语言,可以实现更复杂的逻辑和交互。 【ASP个人主页系统】 一个ASP个人主页系统通常包括登录注册、个人信息管理、内容发布...

    PHP+FLASH调用摄像头拍照解析.zip

    3. **调用过程**: - 用户打开网页,Flash组件请求访问摄像头权限。 - 用户同意后,Flash显示摄像头的实时预览。 - 用户点击拍照按钮,ACTIONSCRIPT捕获当前帧图像并编码为二进制数据。 - ACTIONSCRIPT发起...

    flash与asp的结合应用实例之一 论坛的实现(上

    5. **安全性**:在处理用户输入时,ASP需要进行数据验证和过滤,防止SQL注入、跨站脚本攻击等安全问题。 6. **响应式设计**:考虑到不同设备的兼容性,Flash和ASP的结合可能需要考虑响应式设计,确保论坛在不同屏幕...

    WEB漏洞含义解释(阿里云)

    XSS 攻击使用到的技术主要为 HTML 和 Javascript,也包括 VBScript 和 ActionScript 等。XSS 攻击对 WEB 服务器虽无直接危害,但是它借助网站进行传播,使网站的使用用户受到攻击,导致网站用户帐号被窃取,从而对...

    超酷Flash留言板

    总之,超酷Flash留言板是一个集成了ActionScript编程、服务器端脚本、数据库管理和用户界面设计的综合项目,它体现了早期Web开发中Flash技术的独特魅力。尽管现代Web开发更倾向于使用HTML5、JavaScript和CSS,但回顾...

    flash安全的各个方面的问题

    XSS攻击是利用Flash与JavaScript的交互能力,将恶意脚本注入到网页中,对用户造成危害。而数据注入则可能通过不安全的输入处理,使得攻击者能够控制Flash应用程序的行为。 编写安全的Flash代码至关重要。开发者应...

    行业分类-设备装置-一种将Flash项目转换为Html5项目的方法与装置.zip

    4. **交互逻辑迁移**:ActionScript是Flash中的脚本语言,要将其转换为JavaScript,需要对ActionScript代码进行分析,理解其逻辑并重写为JavaScript代码。这可能涉及到DOM操作、事件处理、时间轴控制等。 5. **资源...

    基于ASP的炫酷Flash网站系统.zip

    3. **服务器控件**:ASP提供了多种内置服务器控件,如Label、TextBox、Button等,用于构建网页表单和处理用户输入。 4. **数据库集成**:ASP可以方便地与各种数据库进行交互,如Access、SQL Server等,通过ADO...

    flash 通过php 调Mysql例子

    在IT行业中,Flash曾是一种广泛用于创建交互式和动态网页内容的工具,它可以通过ActionScript 3(AS3)编程语言来实现丰富的用户界面和动画效果。PHP则是一种流行的服务器端脚本语言,常用于处理网页后端逻辑,如与...

Global site tag (gtag.js) - Google Analytics