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控件进行控制的函数。
(3ytl)