tomspapaya

使用swfobject.js时样式及传参的问题

swfobject.js

最近需要在项目中引入swf文件。

最初的写法:

        <div id="recorderDiv">
         <object id="recorder"   
                classid="clsid:d27cdb6e-ae6d-11cf-96b8444553540000"codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" 
                align="center">
                 <param name="allowScriptAccess" value="sameDomain" /> 
                 <param name="movie" value="<%=basePath %>flash/Recorder.swf" /> 
                 <param name="quality" value="high" /> 
                 <param name="bgcolor" value="#ffffff" /> 
                 <param name="allowFullScreen" value="false" /> 
                 <param name="wmode" value="transparent" />
                 <embed src="<%=basePath %>flash/Recorder.swf" align="center" type="application/x-shockwave-flash" id="embed"> 
        </object> 
        </div>

由于IE只支持对Object的解析,火狐、谷歌、Safari只支持对Embed的解析,所以这种写法在版本较高的浏览器中表现的还算正常。

但在IE8下,以上写法弹窗报错:参数无效。

引入swfobject.js后的写法:

function createRecorder() {
                var flashvars = {};
                var params = {};
                var attributes = {
                        styleclass: "recorderClass"
                }
                swfobject.embedSWF("<%=basePath %>flash/Recorder.swf" ,"recorderDiv", "320", "220", "9.0.0", "<%=basePath %>flash/Recorder.swf"
, flashvars, params, attributes); 
}

这种写法,使得兼容性的问题得以解决。但却带来两个问题:

一、此前为embed标签单独写了样式,这时需要换种方式制定样式

代码如上所示,使用styleclass指定<embed/>的样式

二、在为swf传参数的时候,只能使用json,这在flex中接收比较繁琐

举例来说,当只需要传递一个参数的时候,我们可以参与如下写法:

swfobject.embedSWF("<%=basePath %>flash/Recorder.swf?msgID=" + msgID ,"recorderDiv", "320", "220", "9.0.0", "<%=basePath %>flash/Recorder.swf?msgID=" + msgID, flashvars, params, attributes); 

 

 附:从网络下载的zip文件,有时可能因为文件过大而被上传者分成多个部分上传。这样下载的文件可能是:a.zip.001、a.zip.002.

对于这样的文件,有时利用压缩软件无法正常解压缩,可以在命令行运行如下命令:

copy /b a.zip.001+a.zip.002 a.zip   这个命令将两个文件合成一个

之后解压缩a.zip即可

 

 

posted on 2014-01-15 14:26  tomspapaya  阅读(645)  评论(0编辑  收藏  举报

导航