4.5.简单例子:共享函数
这个例子非常酷。它允许在别人的浏览器上打开一个web页面。你可以从任何域打开一个页面,不只是你本地。下面是会用到的类和对像:
Classes
NetConnection
SharedObject
NetStatusEvent
SyncEvent
MouseEvent
URLRequest
InputText
Button
Functions
navigateToURL
Objects
InputText component
Button component
为了设置一个链接到另一个URL,as3.0使用URLRequest类和navigateToURL (),它们两个都是属于flash.net包。因为函数的参数是一个字符串(URL),这个参数将会成为共享对像。图4-4展示了代码的其中一块,共享对 像的改变到触发函数:
Figure 4-4. Path of shared object events
· 在步骤1中,一个data的属性”web”,给它指定了一个值:http://+文本框中输入的文本
· 共享对像的改变导致了一个同步事件,触发了checkSO函数
· 在步骤3中,遍历changeList数组,寻找cdode的值
· 在步骤中,找到了code 的值为”change”
· 步骤5启动了存储在web_so.data.web插槽中的web网址,
为了帮助您看看还有什么打算就在这个过程中,code值为“success”显示了在输出窗口web_so.data.web的值。如果您想要,您可以使用这一事件代码在用户端的窗口开启相同的网站。图4-5显示了应用程序正在工作:
图4-5. Opening Web page on remote client
使用图4-5为指导,贯彻落实下列步骤来建立完整的应用程序:
1. 建立一个SharedFunction.fla
2. 使用一个11号大小的Arial字体,类型为静态文本,输入: Enter URL for display on remote client。设置它的x=20,y=14
3. 从组件面板中拖 InputText 和 Button 组件到库中
4. 建立一个SharedFunction.as
5. SharedFunction.as中输入以下代码:
Example 4-4. SharedFunction.as
Code View:
package
{
import fl.controls.Button;
import fl.controls.TextInput;
import flash.display.Sprite;
import flash.events.SyncEvent;
import flash.events.NetStatusEvent;
import flash.events.MouseEvent;
import flash.net.SharedObject;
import flash.net.NetConnection;
import flash.net.URLRequest;
import flash.net.navigateToURL;
public class SharedFunction extends Sprite
{
private var button:Button;
private var web_so:SharedObject;
private var nc:NetConnection;
private var textInput:TextInput;
private var rtmpGo:String;
private var webURL:String;
private var good:Boolean;
private var webRequest:URLRequest;
public function SharedFunction ()
{
//Set up UIs
textInput=new TextInput();
textInput.setSize(150,24);
textInput.move (20,50);
addChild (textInput);
button=new Button();
button.width=150;
button.label="Open Web Page";
button.move (20,80);
button.addEventListener (MouseEvent.CLICK,sendWeb);
addChild (button);
//NetConnection
rtmpGo = "rtmp://192.168.0.11/basicSO";
nc = new NetConnection( );
nc.connect (rtmpGo);
nc.addEventListener (NetStatusEvent.NET_STATUS,doSO);
}
private function doSO (e:NetStatusEvent):void
{
good=e.info.code == "NetConnection.Connect.Success";
if (good)
{
//Set up shared object
web_so=SharedObject.getRemote("web",nc.uri,false);
web_so.connect (nc);
web_so.addEventListener (SyncEvent.SYNC,checkSO);
}
}
private function checkSO (e:SyncEvent):void
{
for (var chng:uint; chng<e.changeList.length; chng++)
{
switch (e.changeList[chng].code)
{
case "clear" :
break;
case "success" :
trace (web_so.data.web);
break;
case "change" :
webRequest=new URLRequest(web_so.data.web);
navigateToURL (webRequest,"_blank");
break;
}
}
}
private function sendWeb (e:MouseEvent):void
{
web_so.setProperty ("web", "http://"+ textInput.text);
}
}
}
6. 切换到SharedFunction.fla文件中,选择文件-发布-添加一个HTML文件。
7. 如果你在单机上开发,有安装服务器的话,打开你的本地服务器的地址,导航到你的SharedFunction.html(http://localhost/myFMSapps/ 或者 http://127.0.0.1/myFMSapps/)。现在打开你的SharedFunction.fla,选择控制-测试影片。在文本输入框中输入一个网址,然后点击按纽。
当您这样做的测试,您会看到仅是在远程客户端打开一个网页。完整的URL名称会出现在输出窗口,以便让 您知道远程客户端实际上会打开什么。它很戏剧性,尽管,如果你在远程客户端测试应用程序。与LAN,如果您在一台电脑的浏览器上打开不同于您开发应用程序 的那台,您会看到网页在远程地点(另一台计算机上局域网)打开。
功能总结:
你可以同时打开两个导出的影片,暂命名为:a.swf和b.swf(a.swf和b.swf是同一个swf,这里为了区分)。在a.swf中输入一 个网址,b.swf会打开一个a.swf中输入的网址。同样,在b.swf中输入一个网址,a.swf会打开一个b.swf中输入的网址。
Copyright 2007-2008 51AS.com Extended in kingcms 鲁ICP备06001158号