actionscript与javascipt通信研究

1、说明

做推广业务的需求。由于推广获得的用户在在不同的推广场景下他们的登录框不一样那么他的登录html页面也不一样。这样增加了推广业务项目的维护复杂度。因此需要把登录界面交个flash做。我们要做的就是flash与JavaScript的通讯交互。

参考学习博客:http://blog.csdn.net/yongh701/article/details/46632399

2、 flash部分

2.1、 获取设计flash

取到设计部给的设计稿用flash打开入下图

这里写图片描述

在第一个图层里面的最后一帧 按F9安静进入代码片段编辑区

这里写图片描述

2.2、 编写actionscript代码

这里写图片描述

import flash.external.ExternalInterface; 
System.security.allowDomain("*");
System.security.allowInsecureDomain("*");//设置允许所有网站都允许Flash与网页之间交互  


namehit.text="用户名由6-15位的字符组成"; 
passhit.text="密码至少为6位字符";  
this.onMouseDown = function(){Selection.setFocus(null)}
username.onKillFocus=function(newFocus:Object){
        ExternalInterface.call("RegCheckName",username.text);
}//用户名输入框失去焦点
pass.onKillFocus=function(newFocus:Object){
        ExternalInterface.call("RegCheckPass",pass.text);
}//密码输入框失去焦点

//判断是否已经注册
bodyButton.addEventListener("click",function(){//点击bodyButton这个按钮  
    ExternalInterface.call("flashBodyClick");   
});

startBtn.onRelease = function ()
{
     ExternalInterface.call("Register",username.text,pass.text);  
};

//注册
ButtonReg.addEventListener("click",function(){//点击ButtonReg这个按钮 

    ExternalInterface.call("Register",username.text,pass.text);  
    //则调用JavaScript中的function show(message){}函数,其中message这个参数值,由EditField1输入的东西填充  
});  

function UserNameHit(msg){  
    //定义一个函数,一旦这个函数触发则把传来的值,填充Label1这个标签文本  
    namehit.text=msg;  
}  
function UserPassHit(msg){  
    //定义一个函数,一旦这个函数触发则把传来的值,填充Label1这个标签文本  
    passhit.text=msg;  
}  


function isRegister(flag){  
    //js传过来的判断,是否注册
    if(flag==false){
        //弹出注册框操作
        namehit.text="弹出注册框操作";  

    }
} 

//注册JavaScriptShow1这个函数,其对外名称为JavaScriptShow1,一般都应该相同的  
//网页调用Flash对象的JavaScriptShow1的方法,则相当于调用ActionScript中的JavaScriptShow1(message1){}函数 
ExternalInterface.addCallback("UserNameHit",null,UserNameHit);  
ExternalInterface.addCallback("UserPassHit",null,UserPassHit);
ExternalInterface.addCallback("isRegister",null,isRegister);

stop ();

2.3、 设置相应控件名称

下图控件名称与actionscript代码中的ButtonReg是对应的

这里写图片描述

    其他的控件以此类推

js部分

js调用flash中的代码

var domain = "http://www.demo.me";
**
 * 注册 给ActionScript所调用的JavaScript函数,
 * name,pass参数被ActionScript传递过来的值所填充
 */
function  RegCheckName(name) {
    var username = $.trim(name);
    if (username.length == '0') {
        flash1.UserNameHit('请输入用户名'); return false;
    }   
    if (username.length < 6 || username.length > 20 || !/^[A-Za-z0-9]/.test(username)) {
        flash1.UserNameHit('请填写6-20位数字, 英文账号'); return false;
    }
    $.ajax({
        type:"get",
        async: false,
        url:domain+"/Openapi/username_check2",
        data:{"u":username},                
        dataType:'jsonp',               
        jsonp:'jsonpCallback',              
        success:function(returnInfo) {
            if(returnInfo['result']=='success'){
                flash1.UserNameHit('用户名可以注册');  return true;
            }else{
                flash1.UserNameHit('用户名已存在'); return false;
            }
        }
    }); 

}
function RegCheckPass(pass) {
    var str = $.trim(pass);
    if (str.length == 0) {
        flash1.UserPassHit('请输入密码');return false;
    }
    if (str.length < 6 || str.length > 16) {
        flash1.UserPassHit('密码至少为6位字符'); return false;
    }
    flash1.UserPassHit('输入正确'); return true;
}

/**
 *flash调用登录方法,或js注册后调用
 */
function Login(name,pass){
    var username =$.trim(name);
    var password = $.trim(pass);
    $.ajax({
        type: "get",
        async: false,
        url: domain+"/openapi/gametgcheck",
        data:{username:username,password:password,gid:gid},
        dataType:'jsonp',
        jsonp:'jsonpCallback',
        success: function (data) {
            if (data['state'] == 1) {
                window.onbeforeunload=null;
                window.onunload=null;
                $('body').append(data['script']);
                if(data['gid']){
                    var tzurl = domain+"/cps/game/gid/"+data['gid']+"/sid/"+data['sid'];
                }else{
                    var tzurl = domain+"/cps/game/gid/"+gid;
                }
                setTimeout("window.location.href='"+tzurl+"'", 200);
            }
            else {
                alert('登陆失败,请检查您的用户名或密码.');
                return false;
            }
        }
    });
}

/**
 *flash注册方法
 */
function Register(name,pass){
    var Request = GetRequest();
    var from = Request['from']?Request['from']:'';
    var username = $.trim(name);
    var password = $.trim(pass);
    var referrer_tg=getTgLocation();
    var locationhref    =   window.location.href;
    RegCheckName(username);
    RegCheckPass(password);
    $.ajax({
        type: "get",
        async: false,
        url:domain+'/Openapi/do_register',
        data:{from:from,username:username,password:password,gid:gid,referrer_tg:referrer_tg,locationhref:locationhref},
        dataType:'jsonp',
        jsonp:'jsonpCallback',
        success:function(data){
            if (data.state == 1) {
                $('body').append(data.script);
                Login(username,password);
            }
        }
    });
}


/**
 * flash动画体点击,flash调用本方法
 */
function flashBodyClick() {
    click_tongji_tc();
    if (getCookie("name")) {
        $.ajax({
            url:domain+'/Index/getUserNameky',
            data:{gid:gid},
            dataType:'jsonp',
            async: false,
            jsonp:'jsonpCallback',
            success:function(data){
                if(data['username'] != ''){
                    window.onbeforeunload=null;
                    window.onunload=null;
                    if(data['sid'] != 0 && data['sid'] != undefined){
                        window.location.href = domain+'/cps/game/gid/'+gid+'/sid/'+data.sid;
                    }else{
                        window.location.href = domain+'/cps/game/gid/'+gid;
                    }
                }else {
                    flash1.isRegister(false);//通知flash没有注册 让他弹出注册框
                }
            }
        });
    } else {
        flash1.isRegister(false);//通知flash没有注册 让他弹出注册框
    }
}

/**
 * 获取登录的用户名称
 */
$(document).ready(function () {
    if (!getCookie("name")) {
        $.ajax({
            url:domain+'/Openapi/getUsername',
            data:'',
            type:'get',
            async:false,
            dataType:'jsonp',
            jsonp:'jsonpCallback',
            success:function(data){
                if(data.state == 1){
                    setCookie("name",data.member,1);
                    flashBodyClick();
                }
            }
        });
    } else {
        flashBodyClick();
    }

});


// 判断是否生成COOKIE
var test;
function getCookie(objName) {   
    var arrStr = document.cookie.split("; ");
    for (var i = 0; i < arrStr.length; i++) {
        var temp = arrStr[i].split("=");
        if (temp[0] == objName) {
            test = decodeURI(temp[1]);          
            return test;
        }
    }
}

function setCookie(c_name, value, expiredays){
    var exdate=new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function GetRequest() {
    var url = location.search; //获取url中"?"符后的字串
    var theRequest = new Object();
    if (url.indexOf("?") != -1) {
        var str = url.substr(1);
        strs = str.split("&");
        for (var i = 0; i < strs.length; i++) {
            theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
        }
    }
    return theRequest;
}
对比actionscript与JavaScript代码你会发现flash提供了提供了外部可以对内部flash控件进行控制的函数。

demo代码下载

研究的所有资料


(3ytl)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值