最近的项目需要在Web上用flash动态加载一幅图片,并能通过html传递参数,并打印。为了便于日后查询,现记录如下:
对flash代码我不是很熟悉,但可以通过load方法加载外部的jpg文件,例如:放入一个Loader并命名为fWURL。其调用代码为fWURL.load(WURL); 其中的WURL为一个外部定义的变量,通过此变量可以从外部(html)动态读入一个值。调动代码如下:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="536" height="309" id="main" align="right">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="
energy.swf" />
<param name="FlashVars" value=
"WURL=http://192.168.100.99:8080/I.gif&MaxLoad=12.5&MinLoad=8.5&Stroke=3.12&StrokeCount=4&Effic=31&DayLiquid=52.6" />
<param name="quality" value="high" />
<embed src="
energy.swf" quality="high" flashvars="WURL=http://192.168.100.99:8080/I.gif&MaxLoad=12.5&MinLoad=8.5&Stroke=3.12&StrokeCount=4&Effic=31&DayLiquid=52.6" width="536" height="309" name="main" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/>
</object>
其蓝字部分为所调用的flash文件名,红字部分为传递的参数,可以看见,共传递了7个参数,中间用&符隔开,一旦在此定义,在flash中即可直接使用。但param和embed标签中的内容必须相同,这是基于IE与Firefox的相容性考虑的。
后又将加载jpg改为加载gif,由于flash中load方法无法加载gif,只有改用loadMovie方法,但经测试后发现loadMovie方法无法动态加载gif(也可能是我使用不当造成的),就只有改用
loadMovieNum方法,成功。其代码为:
loadMovieNum(WURL,1) ;1表示层。
对于打印,需要在html上下功夫。我采用javascript方法弹出一个窗口,代码如下:<script language="javascript">
window.open('http://192.168.100.99:8080/PowerPrint.htm?MaxLoad=456&MinLoad=12&Stroke=3&StrokeCount=9&Effic=3&DayLiquid=2.4&WURL=http://192.168.100.99:8080/PI.gif', '窗口名', 'height=380, width=550, top=0, left=0, toolbar=no, menubar=no, scrollbars=yas, resizable=no,location=no, status=no');
</script>
可以看见,我在调用时将参数以URL方式传递给窗口。 以下即为打印窗口内容。
我在打印窗口中加入需要打印的页面,最后打印,其代码为:
<script type="text/javascript">
var WURL="";
var MaxLoad="";
var MinLoad="";
var Stroke="";
var StrokeCount="";
var Effic="";
var DayLiquid="";
Request = { QueryString : function(item)
{ var svalue = location.search.match(new RegExp("[/?/&]" + item + "=([^/&]*)(/&?)","i"));
return svalue ? svalue[1] : svalue; }}
<!— 读取各参量部分 -->
WURL=Request.QueryString("WURL");
WURL=WURL.toString();
MaxLoad=Request.QueryString("MaxLoad");
MaxLoad=MaxLoad.toString();
MinLoad=Request.QueryString("MinLoad");
MinLoad=MinLoad.toString();
Stroke=Request.QueryString("Stroke");
Stroke=Stroke.toString();
StrokeCount=Request.QueryString("StrokeCount");
StrokeCount=StrokeCount.toString();
Effic=Request.QueryString("Effic");
Effic=Effic.toString();
DayLiquid=Request.QueryString("DayLiquid");
DayLiquid=DayLiquid.toString();
function getvar1(){ <!—得到传递参数 -->
return "WURL="+WURL+"&MaxLoad="+MaxLoad+"&MinLoad="+MinLoad+"&Stroke="+Stroke+"&StrokeCount="+StrokeCount+"&Effic="+Effic+"&DayLiquid="+DayLiquid;
}
var flashObj="<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0'";
flashObj=flashObj+" width='536' height='309' id='main' align='center'><param name='allowScriptAccess' value='always' />";
flashObj=flashObj+"<param name='movie' value='energyPrint.swf' />";
flashObj=flashObj+"<param name='FlashVars' value="+getvar1()+" /><param name='quality' value='high' />";
flashObj=flashObj+"<embed src='energyPrint.swf' quality='high' flashvars="+getvar1()+" width='536' height='309' name='main' align='middle' allowScriptAccess='sameDomain' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer'/></object> ";
if(WURL==null||WURL==""||MaxLoad==null||MaxLoad==""||MinLoad==null||MinLoad==""||Stroke==null||Stroke==""||StrokeCount==null||StrokeCount==""||Effic==null||Effic==""||DayLiquid==null||DayLiquid=="")
document.write("不正确的参数!")
else
document.write(flashObj);
function doprint(){
window.print();
}
</script>
<p>
<input type="button" name="aaa" value="打印" onClick=doprint()>
</p>
以上红字部分为从当前页URL部分读取传递的各参量,蓝字部分为组织flash调用代码,此代码需要通过javascript的document.write方法输出。如此,只需要将生成的swf文件和打印专用的html文件放入Web根文件夹下,通过IE访问即可。