html<embed>标签和url向Flash传flashvars值
今天的工作遇到了flash读取embed中的flashvars值,特意研究了一下。
先看html代码:
<object>
<embed src="test.swf" wmode="transparent" quality="high" width="550" height="400" align="L" scale="noborder" flashvars="width=300&height=500&color=blue" allowScriptAccess="sameDomain" type="application/x-shockwave-flash">
</embed>
</object>
AS3代码test.swf:
var tf:TextField=new TextField();
var str1:String =stage.loaderInfo.parameters.width;
var str2:String =stage.loaderInfo.parameters.height;
var str3:String =stage.loaderInfo.parameters.color;
tf.text="width="+str1+"height="+str2+"color="+str3;
tf.width=300;
addChild(tf);
embed中的swf可以读取flashvars中的值对,此时舞台上显示出了响应的结果。这种方法可以用到简单的数据交换,方便省事,避免读取xml或借用js得到外部数据。
如果有多个值对也可以用for in遍历:
AS3代码:
var tf:TextField=new TextField();
var paramObj:Object=stage.loaderInfo.parameters;
for(var key:String in paramObj){
tf.appendText(key+"="+paramObj[key]);
}
tf.width=300;
addChild(tf);
读取到的flashvars其实是一个Object类型,可以用for in遍历。但这种方法要注意测试的时候html文件路径避免是中文,因为这样可能会导致flash读取到的数据是乱码。
讨论另一种情况。
如果这个swf没有插入到html中,而是直接用http://www.abc.com/test.swf这种方式打开的话那flash的stage.loaderInfo.parameters不就得不到数据了吗?
其实也不是,不妨换一种方法。如果你在后面加上相应的参数如:http://www.abc.com/test.swf?width=300&height=500&color=blue,enter打开一下该网页,你会发现舞台上又显示出了url传来的值,url传值到了stage.loaderInfo.parameters对象中。这种方法在本地测试不了,必须放在服务器上如localhost。
该例子的代码整理如下:
html:
<!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>Flash读取embed的值</title> </head> <body> <div> <object> <embed src="test.swf" wmode="transparent" quality="high" width="550" height="400" align="L" scale="noborder" flashvars="width=300&height=500&color=blue" allowScriptAccess="sameDomain" type="application/x-shockwave-flash"> </embed> </object> </div> </body> </html>
AS3代码:
var tf:TextField=new TextField(); var str1:String =stage.loaderInfo.parameters.width; var str2:String =stage.loaderInfo.parameters.height; var str3:String =stage.loaderInfo.parameters.color; tf.text="width="+str1+"height="+str2+"color="+str3; //或者用for in来遍历 /*var paramObj:Object=stage.loaderInfo.parameters; for(var key:String in paramObj){ tf.appendText(key+"="+paramObj[key]); }*/ tf.width=300; addChild(tf);
==================================================
作者:绿色花园
出处:http://www.cnblogs.com/cos2004/archive/2011/03/30/1999925.html
==================================================
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
2011-03-01 深入研究Repeater控件:最大的灵活性
2011-03-01 常用Web Service汇总(天气预报、时刻表等)
2011-03-01 File,FileStream,byte[]3者互相转换总结(转)
2011-03-01 vs 下调试 引用的DLL源码
2011-03-01 jQuery获取文本节点之-text()/val()/html() 方法区别
2011-03-01 动态执行javascript代码