首页 > 教程 > 关键词  > 网页最新资讯  > 正文

HTML网页与FLASH之间的“静态”传值

2007-06-05 15:01 · 稿源:闪吧BBS

在论坛上经常看见有新手问到“我想让FLASH得到URL中的参数ID号,该怎么办?”“某某视频网站的FLASH播放器是如何播放不同ID的视频的?”...诸如此类问题看到了太多,每次都有一堆回帖,众说纷纭,里面难免有误导性质的回复。今天特结合自己平时工作中使用的心得对此类问题做一个小小的归纳。

我所指的静态传值是区别于与服务端通信进行值传递的方式,例如LoadVars,XML,Remoting之类,后者暂且不在本文的讨论范围内,当你想让FLASH获取URL中的参数时,你为何不换个角度想了?其实我们可以让服务端动态生成SWF的的插入代码,主动将我们需要的参数“静态”传递给FLASH,FLASH直接用就可以了,根本不需要自己去拿,而以何种形式传递给FLASH,就是我所指的静态传值。我知道的可行的HTML与FLASH之间的静态传值方法有三种:

SWF地址后使用参数传递符“?”

FlashVars传递

JS控制

下面来具体介绍下这三种方式的传递是如何工作的:

一、SWF地址后使用参数传递符“?”

我们知道,在ULR地址中使用参数传递符“?”可以以GET方式传递参数,例如https://www.v-sky.com?uid=12&uname=vsky,这里使用了参数传递符“?”,同时使用了连接符“&”做为变量分隔标识,以这种规范的格式来传递两个参数:uid=12和uname=vsky,那么服务端可以使用GET方式获取这两个值。

在FLASH中我们同样可以采用类似的方式来传递参数,HTML页面中插入SWF文件最常用的就是使用Object标签和Embed标签结合的方式,这也是Adobe的推荐方式:

以下为引用的内容:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="demo.swf?uid=12&uname=vsky" />
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
<embed src="demo.swf?uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="https://www.macromedia.com/go/getflashplayer" />
</object>

其中粗体部分对应的就是SWF文件的地址,那么我们可以在这个地址后面通过类似于URL中GET方式传参的方法来个SWF传递参数,例如上面代码在页面完全加载完毕时,它已经给SWF文件写入了两个变量:uid=12和uname=vsky。

二、FlashVars传递

你可以查阅FLASH帮助文档来看FlashVars的官方定义。其实在HTML语法中,这是一个被很多新手所忽视的属性,同样以上面的参数为例,下面用FlashVars来传递变量:

以下为引用的内容:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="demo.swf" />
<param name="FlashVars" value="uid=12&uname=vsky" />
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />
<embed src="demo.swf" FlashVars="uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="https://www.macromedia.com/go/getflashplayer" />
</object>

跟方式一相同,它也是直接给FLASH里添加了这两个变量。但我个人推荐使用此方式,结合SWFObject的使用,使用FlashVars来传递变量有很多好处,例如代码清晰,容易管理,浏览其兼容,符合标准。他们的结合使用在“为FLASH程序构造灵活的接口”一文中我已经做了介绍(PS:随后我会提供一个复杂点的、有说服力的实际应用来说明这种灵活接口的使用)。

三、JS控制

对于客户端页面中的资源,JS通过DOM结构来控制它们可以说是随心所欲的,FLASH也不例外,下面是Flash Player的Javascript方法一览表:

以下为引用的内容:

Play() —————————————- 播放动画
StopPlay()————————————停止动画
IsPlaying()———————————– 动画是否正在播放
GotoFrame(frame_number)—————- 跳转到某帧
TotalFrames()——————————- 获取动画总帧数
CurrentFrame()——————————回传当前动画所在帧数-1
Rewind()————————————-使动画返回第一帧
SetZoomRect(left,top,right,buttom)——-放大指定区域
Zoom(percent)——————————改变动画大小
Pan(x_position,y_position,unit)————使动画在x,y方向上平移
PercentLoaded()—————————-返回动画被载入的百分比
LoadMovie(level_number,path)———– 加载动画
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数
TGotoLabel(movie_clip,label_name)—— movie_clip跳转到指定标签
TCurrentFrame(movie_clip)————— 回传movie_clip当前帧-1
TCurrentLabel(movie_clip)—————–回传movie_clip当前标签
TPlay(movie_clip)—————————播放movie_clip
TStopPlay(movie_clip)———————-停止movie_clip的播放
GetVariable(variable_name)—————–获取变量
SetVariable(variable_name,value)———–变量赋值
TCallFrame(movie_clip,frame_number)—call指定帧上的action
TCallLabel(movie_clip,label)—————-call指定标签上的action
TGetProperty(movie_clip,property)——–获取movie_clip的指定属性
TSetProperty(movie_clip,property,number)———-设置movie_clip的指定属性
在这里我们只需要使用的是粗体标识的SetVariable方法,JS通过调用此方法能够直接更改SWF中的变量值。首先我们需要定义插入的SWF的ID,例如id为VskyDemo,那么我们可以通过下面的JS语句来完成SWF内部变量的设置: window.document.VskyDemo.SetVariable("uid", 12);

很简单吧,就是这样的。除非是涉及到了HTML中SWF之外元素跟它交互,否则我一般不使用JS来控制SWF里的变量,因为我总觉得怪怪的,呵呵,个人习惯吧。多多实践,不要觉得这些小东西不起眼,小东西多了,聚结到一起了就是一个大的应用。条条大路通北京,选择你自己喜欢的,自己认为便捷的方式就可以了,目前我是没有发现这三个方式存在功能上的缺陷。

欢迎大家加入讨论,如承蒙转载,请注明出处:https://www.v-sky.com/blog/index.php/archives/179

举报

  • 相关推荐
  • AI 大模型选型指导:一文实测 Kimi‑K2‑Turbo‑Preview 与 Qwen3‑Coder‑Flash

    本文对比分析了Kimi-K2-Turbo-Preview和Qwen3-Coder-Flash两款AI大模型在开发者选型中的表现。K2-Turbo采用MoE架构,激活参数32B,支持128K上下文,在代码调试和自动化流程方面表现突出;Qwen3-Coder为480B参数的MoE模型,原生支持256K上下文,擅长大规模代码库理解和API集成。二者在中级任务表现接近,但K2在复杂可视化任务更优,Qwen3在多轮Agent调用更稳定。建议根据需求选择:注重调试自动化选K2,需要长上下文支持选Qwen3。推荐使用AIbase模型广场进行高效选型对比。

  • AI日报:扣子空间网页设计功能上线;阿里Wan 2.2即将上线;​OpenAI即将发布 GPT-5

    【AI日报】今日AI领域重要动态:1)Coze推出网页AI设计功能,5分钟生成网页;2)通义千问发布Qwen-MT翻译模型,支持92种语言;3)ChatGPT全面推出Agent功能;4)阿里云Wan2.2视频生成AI即将上线;5)Anthropic推出审计Agent提升AI对齐测试;6)OpenAI计划8月发布GPT-5;7)谷歌发布无代码AI应用开发工具Opal;8)南洋理工与上海AI Lab推出PhysX-3D项目,为3D模型添加物理属性;9)快手开源KAT-V1大模型,40B版本性能接近DeepSeek-R1;10)讯飞星火X1升级版上线,在多语言和语音处理方面显著提升。(140字)

  • Try Galaxy更新!在自己手机即可体验更便捷、直观、可定制化的Galaxy创新功能

    三星8月7日推出新版"Try Galaxy"应用,让用户在购买最新Galaxy旗舰产品前,能在现有手机上体验三星创新功能。该应用支持iOS和安卓用户体验One UI 8界面、照片助手、音频橡皮擦等AI功能,以及折叠屏旗舰的创新体验。新版主要更新包括:1)采用One UI 8界面和最新壁纸;2)新增照片助手的"消除建议"AI功能;3)提供Fold7/Flip7的3D交互体验;4)展示穿戴设备新品。用户无需换机即可通过扫码下载最新版应用,全面了解Galaxy产品的独特优势。

  • AI日报:通义开源AI编程大模型Qwen3-Coder;​360将推智能眼镜和AI录音笔;谷歌发布Gemini 2.5 Flash-Lite 稳定版

    本文介绍了AI领域多项重要进展:1)谷歌发布Gemini 2.5 Flash-Lite稳定版,平衡速度与成本;2)腾讯混元ASR语音大模型接入ima平台;3)阿里开源Qwen3-Coder编程大模型;4)360将推智能眼镜和AI录音笔;5)夸克健康大模型通过医师评测;6)零一万物发布企业级大模型平台;7)Hedra推出低成本AI视频代理;8)Gemini2.5革新图像理解能力;9)Meta推出创新文本处理模型AU-Nets;10)苹果AI团队或寻求第三方合

  • Matrixport CEO John 出席 Foresight 2024 年度峰会,表示Matrixport将持续拥抱合规,提供专业资管服务

    Matrixport CEO John Ge在"Foresight2024"峰会上表示,合规化是加密行业主旋律。他指出当前加密市场缺乏新流量入场,资产管理趋向主流资产集中化,BTC、ETH等占比很高。随着加密ETF通过,合规属性增强,跨圈资管开始复苏。Matrixport将持续拥抱合规,为更多用户提供专业资管服务,帮助用户获取理性收益。公司成立于2019年,是亚洲最大的一站式加密金融服务平台,致力于构建�

  • 世纪华通:市值稳坐千亿 《Kingshot》7月流水首破5000万美元

    世纪华通旗下Century Games两款出海手游《Whiteout Survival》和《Kingshot》表现亮眼。7月《Whiteout Survival》收入1.27亿美元稳居全球第三,上线两年保持稳健;《Kingshot》上线5个月收入突破5300万美元,环比增长43%排名第11位。世纪华通股价随之上涨,市值重回千亿。两款产品成功印证了中国游戏出海的实力,其中《Kingshot》已进入39个地区iOS畅销榜TOP10。公司上半年业绩预告显示营收同比增长83.27%,净利润增幅超107%,研发运营一体化优势显著。中国自研游戏上半年海外收入达95亿美元,同比增长11.07%,世纪华通通过多元化产品矩阵持续领跑。

  • GPT-5和Claude 4 Opus谁更强?用这个AI大模型对比工具一眼明了

    OpenAI正式发布GPT-5,与Claude4Opus和Gemini2.5Pro进行对比测试。GPT-5在编程能力(SWE-bench测试74.9%)和数学推理(AIME2025测试94.6%)表现突出;Claude4Opus编程优异(72.5%)但数学较弱(33.9%);Gemini2.5Pro擅长长文本处理(100万token窗口)和多模态应用。价格方面,GPT-5和Gemini2.5Pro定价相近($1.25-$10),Claude4Opus较高($15-$75)。建议根据需求选择:GPT-5适合综合应用,Claude4Opus适合专业编程,Gemini2.5Pro适合长文档�

  • OpenAI正式发布GPT-5模型 网友:写作像诗人

    OpenAI在直播活动中正式推出新一代人工智能模型GPT-5,宣称其覆盖编程、数学、写作、健康咨询、视觉感知等核心领域,实现"公司迄今为止最重大的模型升级"。OpenAI首席执行官萨姆·奥尔特曼(Sam Altman)形容,与GPT-5交互如同与各领域专家对话,其多维度能力突破将重塑人机协作模式。 分层开放策略满足多元需求 GPT-5将于本周四启动全球用户分批推送,免费用户与付�

  • AI日报:GPT-5-Auto现身Mac客户端;阿里开源WebAgent项目WebShaper;腾讯推X-Omni多模态模型

    【AI日报】今日AI领域重要动态:1)阿里开源WebAgent项目WebShaper,GAIA评测超越Claude4-Sonnet;2)Moonvalley推出草图转视频功能,支持手绘生成电影级视频;3)腾讯X-Omni模型实现图文理解重大突破;4)百度搜索测试AI应用中心入口;5)Midjourney+新增个性化推荐功能;6)GPT-5或于2025年夏季发布;7)Ollama推出桌面客户端;8)OWL团队开源多智能体协作工具Eigent;9)OpenAI年收入激增至120亿美元;10)英伟达H20芯片因安全风险被约谈;11)万兴科技天幕2.0模型国内排名第四,与华为云共建AI视频实验室。

  • Lamett乐迈石晶携手肖战共筑品牌势能,经销商信心倍增抢滩市场

    欧洲高端建材品牌Lamett乐迈石晶宣布肖战成为首位全球品牌代言人,双方将共同推动"健康、安全"理念。Lamett创立于1985年,专注新型建材研发,2016年首创全球首款石晶地板,2024年又推出石晶柜板,实现从地面到全屋空间的应用突破。此次合作将助力品牌从专业领域走向大众视野,通过"全域营销+供应链布局+数字化管理"赋能经销商。目前品牌在中国设有七大直营体验中心,未来将通过"东西南北中"五大生产基地实现全链路自主把控。