2007年9月26日

flash8与javascript集成
本文作者:egoldy
文章出处:未知
文章性质:翻译
阅读次数:18845
发布时间:2005-11-19
Flash8与javascript集成

本文部分内容来自emllab,在后部分,加入了本人的一个整合范例,中文译文转载请注明本站出处.

        在过去的一年里,对于开发人员来说使用flash与javascript通讯总会碰到一些麻烦的事情,从flash调用javascript函数已经没有什么问题了,因为我们可以使用getURL方法来直接调用,但是要想使用javascript返回flash在许多浏览器上几乎是不可能的。但是现在可以了。
Flash8的出现,这件事就变的比较容易了。J

The ExternalInterface API

        之前我们使用flash调用javascript函数,一般使用这样的方法:
代码:
getURL(“javascript:alert(‘hello webstudio.com.cn’);”);

但是使用这种方法从flash调用javascript函数仍存在许多困难。特别是在处理多个javascript函数调用问题上。ExternalInterface API可以与javascript实现无缝调用,并且它的能力达到可以在flash时间线使用。

在我们正式进入它的使用方法之前,我们需要确保在flash时间上可用,就要导入它的类向这样:
代码:
import flash.external.*;


现在它已经允许我们做的第一件事就是可以调用javascript函数了。

Call 调用方法

call方法对于ExternalInterface对象来说是一个静态方法,也就是说我们不需要使用ExternalInterface对象的实例来调用方法,我们可以直接通过对象类来调用,向这样:
代码:
ExternalInterface.call(functionName:String,Parameters);

这个方法有两个参数:
·    functionName – 你想要调用的javascript函数名要以字符串的形式
·    Parameters – 需要传递给javascript函数的参数,用逗号分开,是可选的。
这些是基本的内容,现在让我们来看一个例子:
1.    创建一个flash文档命名为external1.fla.
2.    创建两个层上面的层命为AS,下面的层命名为”内容”
3.    在内容层里面,创建一个文本域,将它设置为输入文本域,打开显示边框以方便你能看到,并给它取个名字为alert_txt,将它放在场景的左边。
4.    仍然在内容这一层上,拖动一个按钮组件于场景中并把它放在动态文本的右边,设置它的label为”Alert”并给它起个名字为alert_butn.
5.    选择上方的as层在第一帧上输入代码,
6.    //调用alert
7.    
代码:
import flash.external.*;
alert_butn.clickHandler = function() {
   ExternalInterface.call("alert", alert_txt.text);
}


前面部分的代码是导入ExternalInterface类包。然后为按钮组件设置事件,当点击时调用javascript函数,并将文本中输入的文本通过externalInterface传递给javascript函数。
现在发布你的影片,将它和html放在服务器上,当你在服务器上测试时不论你在文本中输入什么信息,它都将显示在alert对话框中,但是如果你在本地测试,你可能就会发现当你点击按钮时,什么也没发生,这是由flashplayer的安全特性造成的。

演示文件

上面这个范例是一个方法的例子,使用getURL方法也可以做到,然而externalinterface不只是能做到这些,除了发送信息给javascript,它还可以通过addCallback方法接收从javascript返回的信息。

addCallback 方法

AddCallback方法允许javascript调用flash时间上函数,基本的语法结构如下:
代码:
ExternalInterface.addCallback(functionID:String,instance:Object,functionName:Function);

与call方法类似,它也是一个静态方法,它有三个参数
·    functionID - 从 JavaScript 调用 ActionScript 函数时可使用的名称。此名称不必与 ActionScript 方法的实际名称匹配。
·    instance - this 在该方法中被解析成的对象。此对象不一定是在其上可找到该方法的对象,您可以指定任何对象(或 null)。
·    functionName - 要从 JavaScript 调用的 ActionScript 方法。
现在让我们开始一个例子,在这个例子中我们将使用flash调用javascript的命令来请示用户输入色值,当色值输入后点击ok,对象返回到flash并更改它的色彩,如下方法:
1.    创建一个flash文档命名为external2.fla.
2.    与第一个例子相同,创建两层上层命名为as.下层命名为“内容”。
3.    在内容层拖动一个按钮组件至场景中,放在左上方,将label设为”变色”,实例名为change_butn.
4.    确保当前在”内容层”,绘制一个色值为0x000000的盒子,大小为100*100,当然这个没有限制。
5.    将这个方块转换为movieclip.实例名称命名为rec_mc.
6.    在第一帧上输入代码如下:
代码:
import flash.external.*;
//改变方块的色彩
function onChange(clr:Number) {
var temp_color:Color = new Color(rec_mc);
   temp_color.setRGB(clr);
}
//允许javascript调用onChang函数
ExternalInterface.addCallback("onChange", this, onChange);
//打开命今窗口
change_butn.clickHandler = function() {
   ExternalInterface.call("callPrompt", "你想用什么的色彩? (ex: 0xff0000)");
}


在代码的前边我们要先导入externalinterface类包,然后我们创建一个能改变场景中方块色彩的函数,完成后,我们调用addCallback方法以使javascript可以调用flash的onChang函数。最后,我们针对按钮创建事件来调用javascript命令。
你需要发布swf和html,然后用编辑软件打开编辑器,如果你只是从flash调用javascirpt,那么你什么也不用做。但是如果你需要使用javascirpt调用flash函数,还有一些小的工作需要做。

在tilte标签的下方加入下面的javascript代码:如下:
代码:

<script language=JavaScript>
var me; //代表swf的id
//获取正确的引用
function getID(swfID) {
   if (navigator.appName.indexOf("Microsoft") > -1) {
      me = window[swfID];
   } else {
      me = document[swfID];
   }
}
//下面这段调用onChang函数并返回到flash.
function makeCall(str){
   me.onChange(str);
}
//下面这个函数是被flash调用的。
function callPrompt(str){
   makeCall(prompt(str));
}
</script>


开始,我们创建变量me来存放swf的引用。如果没有它,我们不能调用flash函数。然后我们使用函数getID通过条件针对不同的浏览器来设置引用,之后,我们创建makeCall函数,用来调用flash函数,最后我们创建由flash来调用的函数callPromt().它将调用makeCall函数来发送信息返回到flash.
在html的body标签的属性中加入onload,并设置它等于getID函数,如下:
代码:
<body bgcolor="#ffffff" onload="getID('external2');">

注意,当我们设函数给onload事件,我们传递给它swf的id.它可以在swf的嵌入位置找到,现在,当页初始化完成后,函数getID将被调用,变量me就会被设置,以使javascript可以调用flash函数。
将文件上传到服务器上,并进行测试,当你点击按钮并在提示中输入色彩值,flash中的方块色就会改变。如下。

演示文件

在弹出窗口时如果你没有输入色彩值,而是点击了取消,会返回null空回flash.flash中的方块仍会保持原色。
最终源文件下载(source)

本人对上面的内容进行了一下整合,制作了一个终合范例,集成有显示swf信息,获取网址,调用对话框.

范例演示
posted @ 2007-09-26 10:40 trace 阅读(73) 评论(0) 编辑

2007年9月14日

ASP.NET 母版页概述

 

使用 ASP.NET 母版页可以为应用程序中的页创建一致的布局。单个母版页可以为应用程序中的所有页(或一组页)定义所需的外观和标准行为。然后可以创建包含要显示的内容的各个内容页。当用户请求内容页时,这些内容页与母版页合并以将母版页的布局与内容页的内容组合在一起输出。

介绍
母版页(MasterPage)就相当于模板页,挺简单的,没什么好说的。基于母版页的常用的功能有:母版页和内容页之间信息的传递,在内容页中用FindControl方法找到内容页中的控件等。另外,母版页是可以嵌套的。


关键
在内容页的头部加上母版页的强类型引用

<%--创建对母版页的强类型引用,并指定到母版页的虚拟路径--%>
<%@ MasterType VirtualPath="~/MasterPage/MasterPage.master" %>


1、内容页传递数据到母版页 - 母版页创建一个公共方法,然后内容页通过“Master.方法”来调用这个公共方法

2、母版页传递数据到内容页 - 母版页创建一个公共事件来传递数据,然后内容页处理这个事件

3、内容页中用FindControl方法找到内容页中的控件 - 用“Master.FindControl("ContentPlaceHolder1").FindControl("你要查找的控件ID")”来查找

4、嵌套母版页 - 说起来麻烦,看源码吧


示例
主母板页
Site.master

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="Site" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    
<title>重新过一遍ASP.NET 2.0(C#)</title>
</head>
<body>
    
<form id="form1" runat="server">
        
<div>
            
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
            
</asp:ContentPlaceHolder>
        
</div>
    
</form>
</body>
</html>


次母板页
MasterPage/MasterPage.master

<%@ Master Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
      CodeFile
="MasterPage.master.cs" Inherits="MasterPage_MasterPage"
%>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    
<p>
          我是一个嵌套母版页
    
</p>
    
<p>
          母版页中的内容
        
<asp:DropDownList ID="ddlMaster" runat="server" DataSourceID="XmlDataSource1" DataTextField="text"
              DataValueField
="value" AutoPostBack="True" OnSelectedIndexChanged="ddlMaster_SelectedIndexChanged">
        
</asp:DropDownList><asp:XmlDataSource ID="XmlDataSource1" runat="server" DataFile="~/Config/DropDownListData.xml">
        
</asp:XmlDataSource>
    
</p>
    
<p>
          内容页中的内容
        
<asp:ContentPlaceHolder ID="cph" runat="Server" />
    
</p>
</asp:Content>


MasterPage/MasterPage.master.cs


内容页
MasterPage/Test.aspx


MasterPage/Test.aspx.cs

[源码下载]

posted @ 2007-09-14 11:38 trace 阅读(200) 评论(0) 编辑

2007年9月11日

浙江大学医学院附一院核医学科与肛肠外科联合采用放射性粒子植入的新方法,先后为数位晚期直肠癌难以手术切除的患者进行治疗,术后患者创口愈合良好,症状明显改善,病情得到控制。

    放射性粒子植入,亦称种子治疗,术中在肿瘤转移灶周围放置的是用钛金属封装好的放射源125I(碘)粒子,通过施源器或施源导管直接对患者肿瘤部位进行照射,放射源能够最大限度贴近肿瘤组织,使之得到有效的杀伤剂量,而临近组织由于距离增加,辐射剂量迅速衰减,从而能够保护周围正常组织。放射性粒子植入治疗,可以有效杀灭肿瘤细胞,缩小病灶,减少复发,使病情得到控制或治愈,延长生存期,并能解除或减轻疼痛,提高患者的生活质量,具有损伤小、恢复快等优点。

posted @ 2007-09-11 14:36 trace 阅读(29) 评论(0) 编辑

2007年9月10日

写这篇文章,第一的目的是驳图王,第二目的是告诉大家有时不起眼或者你不以为然的方法却可以给你带来巨大的流量。

  第一,驳图王。我这个人记忆比较好,在1月底的时候,我曾问过图王,作为我们这样的小站长,技术不过关,SEO什么的都是略知皮毛,甚至说一点不通的情况下,如何做站,如何做到流量,直接人工去在论坛发贴行不行,他的回答是不行的,说一天最多五百个IP左右。

  有关这个问题的交流,大家可以到admin5.com/html/1/1/20070304/36462.html看看,在页面下方我贴出和图王的交谈过程。

  我要告诉图王和大家的是,这样的方法只要你找对地方是一直有效的。因为我们和管理员打的是矛盾站,他不可能24小时盯着,即使24小时盯着也不可能我们一发他就看到,当然这样说有点太那个了,不过咱是小站长,没办法啊。

  下面附上我们做的证据:

  从夜里12点,到下午五点多,IP已经一万二千多了,大家比较一下昨天的IP数,不过2704,而历史最高IP不过3797。  为什么一下子增加了这么多,就是因为我们手工推广了。

  再来看看来路分析,可以看出一条贴子竟然能带来几千个PV,不要我说了吧。

  下面说第二个话题,其实我认可图王说的一句话,想一想我们这样做,虽然有些累,不为大站长或高手所认可,但是与那些打工者一年的工资不过万元相比,我们的收入高多了,我们的付出少多了。我之所以没有把来路显示出来,是因为如果显示出来,那么这儿我就用不起来了。而这样的地方相信还有很多,只要你愿意尝试,只要你去尝试,一定会有好的发现。比如百度知道、空间等,为了让大家更理性的认识到百度空间的重要性,给大家看一个链接http://hi.baidu.com/sdfsdfhsdfs,首先申请这个空间不是我的,只是我发现利用百度空间比较到位的一个人。为这么这样说呢:

http://www.baidu.com/baidu?word=%C3%D4%CA%A7%B5%DA%C8%FD%BC%BE%B5%DA10%BC%AF&tn=myie2dg关键字排第二位

http://www.baidu.com/baidu?word=%D3%B6%B1%F8%CC%EC%CF%C2%B5%DA%C1%F9%BE%ED47%D5%C2&tn=myie2dg关键字排第一位

http://www.baidu.com/baidu?word=%CA%C0%BC%E4%C2%B7%BD%E1%BE%D6&tn=myie2dg关键字排第三位

http://www.baidu.com/baidu?word=%BA%A3%D4%F4%CD%F5299&tn=myie2dg关键字排第一位

http://www.baidu.com/baidu?word=%C9%D9%C4%EA%B0%FC%C7%E0%CC%EC3%BD%E1%BE%D6&tn=myie2dg关键字排第二位

  虽然这些关键字仍不起眼,但是每天给他自己的网站带过去的流量,每个应该在五百IP以上,我上面只是举了部分例子,算起来仅此一项就很不错了。

  你发现其中的关键了吗,发现到其中的奥妙了吗!用心去思考,用心去操作,用心去尝试,不要怕麻烦,多作才能知道!如果你不愿意多做,愿意直接去分享别人的成果与发现,那么就要付出其它一些东西!

  希望上面的这个博客主不要怪我,我关注你的博客有一段时间了,可能我这样做,很快就会有很多人跟风。希望大家多与我交流!如果你有什么不懂的,或者你不愿意去尝试的,我们可以做一些交流、交换。 注明站长网。

posted @ 2007-09-10 18:50 trace 阅读(57) 评论(0) 编辑
 
如果您想某个关键字被搜索引擎收录,你可以让这个字在你的站多次出现,并且加粗,比一般的字大很多。
posted @ 2007-09-10 17:31 trace 阅读(30) 评论(0) 编辑

2007年8月31日

//-------缓动函数-----------闪吧新社区$` [R*T7gQTw
function MoveTo(mcName, mcX, mcY, a) {闪吧新社区g Y^&cJhp JZ
 mcName.onEnterFrame = function() {
WL;Z%a{-A!Bk hm;y0  mcName._x += (mcX-mcName._x)/a;
Nm:Z:R F]#D0  mcName._y += (mcY-mcName._y)/a;
4t nw:U;u _2_0  if (mcX == mcName._x && mcY == mcName._y) {闪吧新社区KH!x Ep d b&@
   delete (mcName.onEnterFrame);
OF!zJo0  }闪吧新社区\#rjF6TH
 };闪吧新社区-bB9wg;eB,^c2s&JFD
}
QA3B ^}v`g0//-------函数调用-------闪吧新社区B/S)[ ] Z0?EjKw
MoveTo("mc1", 100, 100, 2);
4[&~1Vtgb*TF0/*
AcV B!| VG[0相关参数说明:
gQ0eg2b e"st+OKG3dH0mcName为指定要移动对象的实例名称
\E#B;J!bX0mcX为要移动到指定点的X坐标
i%}[3n"F?~ i,y$S0mcY为要移动到指定点的Y坐标闪吧新社区{ r\Wn$|},o
a为移动的加速度闪吧新社区,K T lL h~m
调用方法:
2[l*nZ[*x)oL0MoveTo("mc1", 100, 100, 2)闪吧新社区PWT^Y i
mc1对象将以2的加速度移动到X轴100,Y轴100的位置闪吧新社区 W(p|P @
可以很方便的反复调用闪吧新社区"u{/F+yZ7E p%h Q
posted @ 2007-08-31 09:03 trace 阅读(62) 评论(0) 编辑

2007年8月21日

posted @ 2007-08-21 11:57 trace 阅读(864) 评论(0) 编辑

2007年8月18日

posted @ 2007-08-18 10:39 trace 阅读(134) 评论(0) 编辑

2007年8月16日

posted @ 2007-08-16 21:04 trace 阅读(77) 评论(0) 编辑
 
posted @ 2007-08-16 21:03 trace 阅读(160) 评论(0) 编辑