智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Web页面Flash传递参数综述

Posted on   Bill Yuan  阅读(1405)  评论(0编辑  收藏  举报

Web页面想Flash传递参数大致分为下面三类

1.通过swf文件的URL传递:即在swf文件的URL后加入形如?a=A&b=B的字符串。
2.通过swf的Activex控件参数传递:即在Object的属性中<param name="FlashVars" value="a=A&b=B"。

这 两种作法的结果都是在swf文件的顶层对象中生成包含两个参数的参数列表:a=A和b=B。在使用ActionScript2.0以前的版本的Flash 中,可以直接通过引用顶层文件对象的root.a,root.b或_level0.a,_level0.b属性就可以访问到了。

在ActionScripti3.0 后,由于加强了面向对象的概念,因此默认的参数被包装在了顶层对象(DisplayObject类型)所包含的LoaderInfo对象的 parameters属性中。通过访问root.loaderInfo.parameters属性可以对传入的参数进行遍历。


例如在文档类中定义var param:Object = root.loaderInfo.parameters;
如果取u1的值,可以用param["u1"],同样u2的值:param["u2"]
做了个小例子,document class如下:

复制代码
 1 package {
 2     import flash.display.Sprite;    
 3     import flash.display.Stage;    
 4     import flash.display.StageScaleMode;    
 5     import flash.text.TextField;    
 6     import flash.text.TextFieldAutoSize;
 7     
 8     public class LoaderInfoDemo extends Sprite {
 9         public function LoaderInfoDemo() {
10             stage.scaleMode = StageScaleMode.NO_SCALE;
11             var out_txt:TextField = createText();
12             out_txt.border = true;
13             out_txt.borderColor = 0xFF6600;
14             out_txt.y = 20;            
15             addChild(out_txt);
16             var info_txt:TextField = createText();
17             info_txt.text = "修改loaderInfoDemo.swf?msg=xxx中的xxx值,然后回车";
18             info_txt.autoSize = TextFieldAutoSize.LEFT;
19             addChild(info_txt);
20             var param:Object = root.loaderInfo.parameters;
21             if (param["msg"!= null) {
22                 out_txt.text = param["msg"];
23                 trace("value:" + param["msg"]);
24             }else {                
25                 out_txt.text = "null";
26                 trace("value:null");
27             }        
28         }                
29         private function createText():TextField {
30             var tmp:TextField = new TextField();
31             tmp.selectable = false;
32             tmp.width = 100;
33             tmp.height = 20;
34             return tmp;
35         }
36     }
37 }
复制代码


3.第三类方法是在影片内部,调用loadVariables方法,从指定位置主动读取配置参数,并将参数数值传递到指定的对象内部。

下面的示例将名为 params.txt 的文本文件中的信息加载到使用 createEmptyMovieClip() 创建的影片剪辑 target_mc 中。setInterval() 函数用于检查加载进度。该脚本检查 params.txt 文件中是否存在名为 done 的变量。

 

复制代码
 1 this.createEmptyMovieClip("target_mc"this.getNextHighestDepth());
 2 loadVariables("params.txt", target_mc);
 3 function checkParamsLoaded() {
 4     if (target_mc.done == undefined)
 5     { 
 6         trace("not yet."); 
 7     } else { 
 8         trace("finished loading. killing interval."); 
 9         trace("-------------"); 
10         for (i in target_mc) {
11             trace(i + "" + target_mc[i]);
12         } 
13         trace("-------------");
14         clearInterval(param_interval);
15     }
16 }
17 var param_interval:Number = setInterval(checkParamsLoaded, 100);
复制代码

 

外部文件 params.txt 包括以下文本:

var1="hello"&var2="goodbye"&done="done"
(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 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的设计模式综述
点击右上角即可分享
微信分享提示