,转html标签和url向Flash传flashvars值

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">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>

<title>Flash读取embed的值</title>

</head>

<body>

<div>

<object>

<embedsrc="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代码:

?

vartf:TextField=newTextField();

varstr1:String=stage.loaderInfo.parameters.width;

varstr2:String=stage.loaderInfo.parameters.height;

varstr3: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

==================================================

IE中:

<param name=”movie” value=”test.swf” />

<param name=”quality” value=”high” />

<param name=”flashvars” value=”str=flashpixy” />

<param name=”menu” value=”false” />

<embed

src=”test.swf”

quality=”high”

pluginspage=”http://www.macromedia.com/go/getflashplayer”

type=”application/x-shockwave-flash”

width=”550″

height=”400″ />

FirFox中:

<param name=”movie” value=”test.swf” />

<param name=”quality” value=”high” />

<param name=”flashvars” value=”youUrl=123″ />

<param name=”menu” value=”false” />

<embed

flashvars=”str=flashpixy”

src=”test.swf”

quality=”high”

pluginspage=”http://www.macromedia.com/go/getflashplayer”

type=”application/x-shockwave-flash”

width=”550″

height=”400″ />

在这两个不同的浏览器中添加的位置不同,要注意啊。不过为了保险,最好是都加上,反正也不碍事。

今天的工作遇到了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">

<htmlxmlns="http://www.w3.org/1999/xhtml">

<head>

<metahttp-equiv="Content-Type"content="text/html; charset=utf-8"/>

<title>Flash读取embed的值</title>

</head>

<body>

<div>

<object>

<embedsrc="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代码:

?

vartf:TextField=newTextField();

varstr1:String=stage.loaderInfo.parameters.width;

varstr2:String=stage.loaderInfo.parameters.height;

varstr3: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

==================================================

IE中:

<param name=”movie” value=”test.swf” />

<param name=”quality” value=”high” />

<param name=”flashvars” value=”str=flashpixy” />

<param name=”menu” value=”false” />

<embed

src=”test.swf”

quality=”high”

pluginspage=”http://www.macromedia.com/go/getflashplayer”

type=”application/x-shockwave-flash”

width=”550″

height=”400″ />

FirFox中:

<param name=”movie” value=”test.swf” />

<param name=”quality” value=”high” />

<param name=”flashvars” value=”youUrl=123″ />

<param name=”menu” value=”false” />

<embed

flashvars=”str=flashpixy”

src=”test.swf”

quality=”high”

pluginspage=”http://www.macromedia.com/go/getflashplayer”

type=”application/x-shockwave-flash”

width=”550″

height=”400″ />

在这两个不同的浏览器中添加的位置不同,要注意啊。不过为了保险,最好是都加上,反正也不碍事。