AS3与JS进行交互(一)

AS3与JS进行交互(一)

这个话题在网上应该说很好找,有很多这方面的资料。比者也看过一些,不过大部分都是AS2与JS进行交互。很少提到AS3,即使有,也让人感觉浅尝辄止。很多东西并没有介绍的太清楚。所有笔者萌生了写这样一篇教程的想法!

提及AS3与外部脚本的交互,笔者认为可以总结成两种。一是AS3调用外部函数,二是外部脚本调用AS3函数。无外乎就这两种。在调用函数的同时,我们还可以向函数传递一些参数。这就达到了传递数据的目的。举一个最简单的例子。我们平时在网络上看视频的时候,这些用AS3制作的播放器就是由外部脚本(可能是JS,也可能是ASP或其他脚本)传递给它的视频地址。从而就简化我们的后台程序。有的人会问!你用播放器去读取外部的XML数据不是也可以吗?确实,当时,当你有成千上万个视频的时候,你不可能输入这么多数据。一是比较麻烦,二来是影响了网页运行的速度。所以,AS3与外部脚本进行交互是非常重要的。

其实,我们做的绝大多数带有交互性的FLASH程序都要多多少少与后台的其他语言进行交互。这里,我们就以JS脚本来举例说明交互的过程。当然,AS3与JS脚本可以说有血缘关系,具体的大家可以去查看一下FLASH的发展历史。好了!废话不多说,我们这就开始讲如何让JS与AS3进行一些信息的交换。本节中,我们只讲解JS调用AS3中的函数。反向的调用我们将在下一节中进行讲解!

首先,我们新建一个FLASH文档,然后在舞台上绘制一个动态文本,该文本的实例名称为wen_txt。好了!美工的部分就算完成了(我们这里是一个非常简单的实例,不要求太复杂。力求突出重点)!

现在,我们要在FLASH中建立一个允许被外部调用的函数。那么如何去建立声明这样一个函数呢?我们要使用到一个类,这个类的名字就是ExternalInterface。很多人都没有太注意过这个类。这个类实际上是在flash.external 包中。这个包是专门用来和外部容器进行通信的。那么对这个ExternalInterface类,它的官方解释是“ExternalInterface 类是外部 API,在 ActionScript 和 Flash Player 的容器之间实现直接通讯的应用程序编程接口,例如,含有 JavaScript 的 HTML 页。”很显然,这里已经提到了JS。好了!下面我们就来写一下脚本吧!如下:

ExternalInterface.addCallback(“abcd”,yun);
function yun(zi:String):void{
wen_txt.text = zi;
}
我们看,建立一个可以被外部调用的函数实际上就是使用了ExternalInterface类的addCallback方法。我们可以从宏观上这样理解。但实际上它的真正作用是将一个函数注册为可从容器调用。实际上我们的FLASH端就这么简单。好了!保存文件,发布。注意!这里,我发布出来的SWF文件的文件名是ab.swf。

上面我们已经将FLASH端的脚本写好了,下面我们来编写JS代码,其实也是一个HTML网页代码,这个HTML代码中包含JS代码!如下:

<!– saved from url=(0014)about:internet –>
<html lang=”en”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>FLASH与JS交互</title>
<script language=”JavaScript”>
function pageInit() {
sendToActionScript(“你好”);
}
function sendToActionScript(value) {
window.ExternalInterfaceExample.abcd(value);
}
</script>
</head>
<body onload=”pageInit();” onclick=”sendToActionScript(“sefd34″)”>
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″
id=”ExternalInterfaceExample” width=”500″ height=”500″
>
<param name=”movie” value=”ab.swf” />
</object>
</body>
</html>

好了!现在将这个网页保存到和ab.swf同一文件夹下,然后运行这个网页。当程序运行的时候,我们就可以看到FLASH中的动态文本会出现“你好”字样!这个过程就是JS调用AS3函数,同时向FLASH传递了一个参数,或者说传递了一组数据。

关于这段JS代码,我们就不多说了。因为涉及到很多JS脚本的只是。大家可以在网上查找相关的资料,就可以明白这段JS脚本的含义了!

本节我们就讲解到这里,下一节我们讲解,FLASH如何向JS传递参数!

AS3与JavaScript进行交互(二)2009-11-26 17:20       书接上文,上次我们讲到JS向FLASH传递参数。本节我们来讲解FLASH向JS传递参数。

先说说原理吧。实际上我们所浏览的每一个网页都可以看作是一个容器。那何为容器呢?说白了就是一个盒子。在这个盒子里面放着许多东西,包括网页中的文字,图片,FLASH,脚本,按钮,文本框等。所以,我们的FLASH如果想访问网页中的JS函数,实际上就是访问上一级中的函数。这种操作相对就要简单一些。因为我们的JS函数对网页中的成员都是公开的,这个网页中的任何元素都能够调用这个JS函数。同样,FLASH也拥有这样的权限。那么好了!我们来看看在网页中具体是怎样做的。

我们这次先来写网页代码,因为网页这边是接受端。代码如下:

<!– saved from url=(0014)about:internet –>
<html lang=”en”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>FLASH与JS交互</title>
<script language=”JavaScript”>
function sendToJavaScript(value) {
document.forms[“form1”].output.value += “\n” + “ActionScript says: ” + value;
}
</script>
</head>
<body>
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″
id=”ExternalInterfaceExample” width=”500″ height=”500″
>
<param name=”movie” value=”ab.swf” />
</object>
<form name=”form1″ onsubmit=”return false;”>
<textarea cols=”60″ rows=”20″ name=”output” readonly=”true”>Initializing…</textarea>
</form>
</body>
</html>

具体的什么意思笔者在这里就不多说了,属于JS方面的知识,大家可以去查看相关资料。好了下面就是FLASH端的代码了!我们先来做美工界面。画一个输入文本,实例名为wen_txt,再做一个影片剪辑元件,实例名为an_mc。好了!美工部分做完了!我们来写脚本。如下:

an_mc.addEventListener(MouseEvent.CLICK,chuan);
function chuan(evt:Event):void {
ExternalInterface.call(“sendToJavaScript”, wen_txt.text);
}
我们看,其实在FLASH中调用外部的JS函数还是用到了ExternalInterface类。而这次我们是使用的call方法。

好了!运行网页,我们在FLASH的输入文本中输入一串文字,然后按一下按钮。之后这段文字就会出现在网页的文本框里面!

大家可以自己动手做一次,体会一下FLASH向JS传递参数的过程!


关注公众号,了解更多it技术(it问答网

Flash AS3.0通过PHP和MYSQL数据库连接

PHP,一种创建动态交互性站点的脚本语言,PHP是免费的,类似于asp,jsp等脚本语言,当然他们各有各的特色,PHP语法类似于Perl和C语言,对于学过编程语言的人来说,学习PHP起来简单的很,我们常用的是PHP配合Apace服务器的使用,最为常见的例如Wordpress,Dede等CMS系统。

Mysql是目前流行的一种数据库,使用方便简单,操作性强,一般都是通过phpmyadmin操作后台使用。

今天做flash的时候,需要进行数据库的链接,而flash无法直接和数据库进行通信,它必须通过一种中介语言与数据库进行交流,即flash as3.0- php(asp,jsp)-mysql等,这是目前很流行的一种做法。

PHP运行环境:

省事一些,安装Xampp,集成了mysql,apache等,免去配置的一切麻烦, 注意Xampp要安装在中文目录下,安装结束后D:\xampp\htdocs文件下放置网站目录文件即可,启动Xampp,建立好数据库,访问http://localhost/website即可访问到website下的网站文件(website文件夹的目录路径为D:\xampp\htdocs\website)。

Mysql数据库连接:(具体php语法在此不再赘述)

<?php
class Sqlconnect
{
private $userName=”root”;
private $userPwd=”123″;
private $dbName=”example”;
private $serverName=”localhost”;

function __construct()
{
//连接数据库
$this->conn=mysql_connect($this->serverName,$this->userName,$this->userPwd);
//选择数据库
$this->my_db=mysql_select_db($this->dbName,$this->conn);
}
//返回model列的内容数组

function method(){//数据库操作语句}
?>

Flash As3.0代码:(前提是你明白什么事AS3.0代码,类似java的一种面向对象的语言,功能好比as1.0,as2.0,一般写在帧上)

//数据库连接
var hostName:String = “http://localhost/amfphp/”;
var gatewayUrl:String = hostName+”gateway.php”;
var nc:NetConnection = new NetConnection();
nc.objectEncoding = 0;
nc.connect(gatewayUrl);
nc.call(“Sqlconnect.method”,new Responder(onResult1,onFault));//这是对于php文件中类方法的调用,会java的人一看就懂。
function onFault(re:Object) {}
function onResult1(re:Object) {
trace(re)}

以上仅仅是文件代码的编写,下面介绍一下针对Flash和数据库连接的环境配置,这是关键。

当然使用Flex开发的话,一切都简单的很,我决定下个月学习一下Flex,估计很不错,之前学了As3.0,感觉真的很强大,我使用的是AMF环境配置来操作as3.0和php进行数据库操作的。

首先,下载一下AMF文件即可,网上Google一下到处都是的,可以从本地网站下载:amfphp 1.9

其次,解压amf文件,amf文件夹放置到D:\xampp\htdocs下面即可,然后数据库连接和操作的php文件放到D:\xampp\htdocs\amf\services下即可了。

以上只是简单的介绍了Flash通过php文件对数据库进行的操作,今后再从头详议。


关注公众号,了解更多it技术(it问答网

MySQL更改root密码

提示:不同的mysql版本,修改账户密码方式略有不同,如:mysql8修改密码

mysql -u root mysql

use mysql;

ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘新密码’;

flush privileges;

 

=====================================

如下是mysql5.6-5.7修改账户和密码:

第一种︰使用 set password 語法

shell> mysql -u root mysql

mysql> SET PASSWORD FOR root=PASSWORD(’new_password’);

第三种︰使用 mysqladmin命令

shell>mysqladmin -u root password new_password

如果忘记了 MySQL 的 root 密码,可以用以下方法重新设置:

1. KILL掉系统里的MySQLD进程;

killall -TREM mysqld

2. 用以下命令启动MySQL,以不检查权限的方式启动;

mysqld_safe -skip-grant-tables &

3. 然后用空密码方式使用root用户登录 MySQL;

mysql -u root

4. 修改root用户的密码;

mysql> update mysql.user set password=PASSWORD(’新密码’) where User=’root’;

mysql> flush privileges;

mysql> quit

5. 重新启动MySQL,就可以使用新密码登录了

注释:在大多数的情况下,修改MySQL是需要有mysql里的root权限的,所以一般用户无法更改密码,除非请求管理员。

方法1

使用phpmyadmin,这是最简单的了,修改mysql库的user表,

不过别忘了使用PASSWORD函数。

方法2

使用mysqladmin,这是前面声明的一个特例。

DE>DE>mysqladmin -u root -p password mypasswd

输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。

把命令里的root改为你的用户名,你就可以改你自己的密码了。

当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,

那么这种方法就是无效的。 而且mysqladmin无法把密码清空。

下面的方法都在mysql提示符下使用,且必须有mysql的root权限:

方法3

DE>DE>mysql> INSERT INTO mysql.user (Host,User,Password) VALUES(\%,jeffrey,PASSWORD( iscuit)); mysql> FLUSH PRIVILEGES

确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。在《mysql中文参考手册》里有这个例子,所以我也就写出来了。 注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。

方法4

和方法三一样,只是使用了REPLACE语句

DE>DE>mysql> REPLACE INTO mysql.user (Host,User,Password) VALUES(\%,jeffrey,PASSWORD( iscuit)); mysql> FLUSH PRIVILEGES

方法5

使用SET PASSWORD语句,

DE>DE>mysql> SET PASSWORD FOR jeffrey@”%” = PASSWORD( iscuit);

你也必须使用PASSWORD()函数,

但是不需要使用FLUSH PRIVILEGES。

方法6

使用GRANT … IDENTIFIED BY语句

DE>DE>mysql> GRANT USAGE ON *.* TO jeffrey@”%” IDENTIFIED BY iscuit

这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。

注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。


关注公众号,了解更多it技术(it问答网

客户机无法通过mstsc连接到远程主机的解决方法

症状:

当通过mstsc命令进行连接时,系统提示:

客户端无法连接远程计算机;

连接可能没有启用,或者计算机太忙,无法接受新连接。也可能网络问题使您无法连接。

请以后再试。如果问题继续出现,请跟系统管理员联系。

 

说明:

两台电脑是在同一个局域网内的;

网络是通的,并且可以进行文件及打印共享;

 

可能存在的问题:

1、3389端口没有开通;

[开始]菜单——设置——控制面板——系统——远程属性——勾起:允许用户远程连接到此计算机

 

2、服务没有启用;

[开始]菜单——设置——控制面板——管理工具——服务——找到:Terminal Services服务:更改成“启动”状态

 

3、防火墙;

如果端口和服务都开通了,还是不能连接,那么就有可能是被防火墙禁止了;关闭防火墙 或者 添加3389端口并允许

下面是WindowsXP自带的防火墙:

[开始]菜单——设置——控制面板——Windows防火墙——例外:勾选“远程桌面”


关注公众号,了解更多it技术(it问答网

远程桌面连接(mstsc)和 Win2003桌面连接(tsmmc)

mstsc在不加参数的情况下看到的是一个虚拟桌面;
mstsc /console(xp sp3以上版本是 mstsc/admin)加了参数以后就是以本地控制台桌面去登录的所看到的是本地桌面;
2003“管理工具”“桌面连接(TSMMC)”所用的连接方式也是以本地控制台桌面去登录的;
我们可以做这么一个测试:
两台2003的机器分别是A和B都启用了远程桌面连接;
我们知道2003默认的连接数是2,加上远程本地控制台连接数1,加起来一共是3,也就是说最多有3个远程连接数。
下面我们A机上做个测试,在A机上通过mstsc连接到B,
1、开个mstsc连接过去,OK没问题
2、再开个mstsc连接过去,OK也没问题
3、继续开个mstsc 加上参数 /console 连接过去它将判断服务器本地是否登陆在桌面,如果登录,则锁定本地登录,桌面被console占用,如果没有登录就开启个本地登录一样的窗口。
4、现在打开tsmmc,用tsmmc连接过去会发现带/console参数的mstsc被踢了出来,TSMMC占用了本地控制台桌面。
5、我们去到物理机B上去发现本地桌面被锁定,输入用户名密码登录进去,返回A机器发现TSMMC被踢了出来。
得出结论本地控制台桌面在同一时间只能有1个连接,“mstsc/console”和TSMMC都是以本地控制台桌面去连接的。
实验到此没有加任何参数的mstsc始终没受影响,因为它们用的是虚拟桌面。
2003的“桌面连接(TSMMC)”的好处在于:可以加入很多远程桌面的连接地址,点一下就可以连接,如果远程服务器比较多,很方便管理。


关注公众号,了解更多it技术(it问答网

更改windows2003的最大连接数

导读:windows  xp和2003中的远程桌面功能非常方便,不像以往需要安装。所以我一直使用,不过由于只允许2个用户登陆,有些时候因为在公司连接后断开,同事在家里用其他用户登陆后断开,我就不能连接了。总是报错“终端服务超过最大连接数”,这时候我和同事都不能登陆,有没有什么办法可以达到以下几个目的中的一个:

1、为账号设定权限,管理员登陆的时候强制注销多余的用户。

2、管理员登陆的时候自动接管在其他地方断开的状态(本来这个功能具备,但有些时候不行)。

3、不安装总段服务的时候增加连接数(不是临时授权)

通过以下方法来增加连接数

运行:services.msc,启用license logging。

打开win2k3的控制面板中的”授权”,点”添加许可”,输入要改的连接数。

别忘了添加完毕后再关闭 License Logging。


关注公众号,了解更多it技术(it问答网

利用js来判断浏览器类型(ie,firefox)

现在网络上的浏览器,操作系统就象中国的方言一样,那个叫多啊!这给我们这些开发人员
带来了巨大的痛苦!虽然可能大家的喜好不同!用的系统也不同!有人喜欢用ie,有人喜欢用
firefox,还有人喜欢用腾讯tt,而我喜欢用maxthon.虽然名字可能有很多种,但是内核还是只有
那么的几种!ie内核,netscape内核!怎么样用js来判断各种浏览器的类型呢!
在不同的浏览器中对js的支持程度,语法要求都不大一样!下面的代码为判断代码

<script language=”JavaScript”>
<!–
function getOs()
{
var OsObject = “”;
if(navigator.userAgent.indexOf(“MSIE”)>0) {
return “MSIE”;
}
if(isFirefox=navigator.userAgent.indexOf(“Firefox”)>0){
return “Firefox”;
}
if(isSafari=navigator.userAgent.indexOf(“Safari”)>0) {
return “Safari”;
}
if(isCamino=navigator.userAgent.indexOf(“Camino”)>0){
return “Camino”;
}
if(isMozilla=navigator.userAgent.indexOf(“Gecko/”)>0){
return “Gecko”;
}

}
alert(“您的浏览器类型为:”+getOs());
–>
</script>

测试一下,你就可以发现了!我用的maxthon,它告诉我的信息却是msie如下图

所以说maxthon和ie是用的同一个内核!而firefox则不是.

tag:js 判断浏览器,判断浏览器版本,判断浏览器类型,判断浏览器的代码,如何判断浏览器


关注公众号,了解更多it技术(it问答网

jquery KindEditor 4 输入框(textarea) 限定字数

代码直接复制就行,如下:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd“>

<html xmlns=”http://www.w3.org/1999/xhtml“>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

<title>KindEditor 4  输入框限定字数</title>

<script charset=”utf-8″ src=”../jquery-1.6.4.min.js”></script>

<script charset=”utf-8″ src=”../kindeditor-min.js”></script>

<script charset=”utf-8″ src=”../lang/zh_CN.js”></script>

<script type=”text/javascript”>

//KindEditor

$(function() {

var editor = KindEditor.create(‘textarea[name=”content1″]‘,{

resizeType : 0,  // 2时可以拖动改变宽度和高度,1时只能改变高度,0时不能拖动。

themeType : ‘simple’,  //指定主题风格,可设置”default”、”simple”  指定simple时需要引入simple.css

height  : ’500px’,

readonlyMode : false, //只读模式 默认为false

allowFileManager : true,  //显示浏览远程服务器按钮

afterChange : function() {

$(‘.word_count1′).html(this.count()); //字数统计包含HTML代码

$(‘.word_count2′).html(this.count(‘text’));  //字数统计包含纯文本、IMG、EMBED,不包含换行符,IMG和EMBED算一个文字

//////////

//限制字数

var limitNum = 100;  //设定限制字数

var pattern = ‘还可以输入’ + limitNum + ‘字’;

$(‘.word_surplus’).html(pattern); //输入显示

if(this.count(‘text’) > limitNum) {

pattern = (‘字数超过限制,请适当删除部分内容’);

//超过字数限制自动截取

var strValue = editor.text();

strValue = strValue.substring(0,limitNum);

editor.text(strValue);

} else {

//计算剩余字数

var result = limitNum – this.count(‘text’);

pattern = ‘还可以输入’ +  result + ‘字’;

}

$(‘.word_surplus’).html(pattern); //输入显示

////////

}

});

 

});

</script>

</head>

<body>

 

<h1>HYZX  默认</h1>

<form name=”example” method=”post” action=”demo-default.php”>

<textarea name=”content1″ id=”content1″ style=”width:700px;height:200px;visibility:hidden;”>000000000</textarea>

<br />

<br>

<br>

<input type=”submit” name=”button” value=”提交内容” />

</form>

<br>

<p> 您当前输入了 <span class=”word_count1″>0</span> 个文字。(字数统计包含HTML代码。)<br />

您当前输入了 <span class=”word_count2″>0</span> 个文字。(字数统计包含纯文本、IMG、EMBED,不包含换行符,IMG和EMBED算一个文字。)<br>

<span class=”word_surplus”></span>

</p>

<br>

</body>

</html>


关注公众号,了解更多it技术(it问答网

jquery 转JS 关于鼠标移动加载CSS样式的

<script type=”text/javascript” src=”style/v2/jquery-1.4.2.min.js”></script><script type=”text/javascript”> $().ready(function(){ $(‘#navi ul li’).hover(function(){ //click $(this).addClass(‘hovernavibg’); },function(){ //鼠标离开时移除divOver样式 $(this).removeClass(‘hovernavibg’); }); }); </script>上面这是用JQUERY写的。


关注公众号,了解更多it技术(it问答网

兼容IE\FF 加入收藏夹和设为首页

<script>// <![CDATA[
<br />
<!– function AddFavorite(sURL, sTitle) { try { window.external.addFavorite(sURL, sTitle); } catch (e) { try { window.sidebar.addPanel(sTitle, sURL, “”); } catch (e) { alert(“加入收藏失败,请使用Ctrl+D进行添加”); } } } function SetHome(obj,vrl){ try{ obj.style.behavior=’url(#default#homepage)’;obj.setHomePage(vrl); } catch(e){ if(window.netscape) { try { netscape.security.PrivilegeManager.enablePrivilege(“UniversalXPConnect”); } catch (e) { alert(“此操作被浏览器拒绝!\n请在浏览器地址栏输入“about:config”并回车\n然后将 [signed.applets.codebase_principal_support]的值设置为’true’,双击即可。”); } var prefs = Components.classes[‘@mozilla.org/preferences-service;1’].getService(Components.interfaces.nsIPrefBranch); prefs.setCharPref(‘browser.startup.homepage’,vrl); } } } //–><br />
// ]]></script>

<a>加入收藏</a>
<a>设为首页</a>


关注公众号,了解更多it技术(it问答网