有載入外部資源的都知道,Flash相對路徑是根據它所在HTML而不是Flash自己本身,例如網頁http://luar.com.hk/test.html有一個http://luar.com.hk/swf/test.swf,這個Flash以相對路徑載入test.xml,Flash Player載入http://luar.com.hk/test.xml而不是http://luar.com.hk/swf/test.xml。因為這種特性,往往發生很多發佈上問題。開發人員明明在本地測試妥當,所有相關files連同swf都放在同一個folder裡面,到交付客戶時,卻出現問題,因為別人可能喜歡將整個東西放在一個subfolder下,在HTML嵌入Flash時,Flash和本身HTML根本不在同一個folder下,結果出現找不到外部資源問題。
其實HTML發佈Flash的參數有一個叫base,可以指示Flash相對路徑由那裡開始,只要設定base=".",就可以跟著Flash路徑走。
平常例子:
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000〃 width="500〃 height="300〃 codebase="http://active.macromedia.com/flash7/cabs/swflash.cab#version=9,0,0,0"> <param name="base" value="."></param> <param name="movie" value="swf/test.swf"></param> <param name="play" value="true"></param> <embed base="." src="swf/test.swf" width="500" height="300" play="true" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"> </embed></object>
用SWFObject例子;
var swfobj = new SWFObject(value, "swf/test.swf", 500, 300, "9.0.0.0", "#FFFFFF"); swfobj.addParam("base", "."); swfobj.write("swfDiv");
用Adobe自帶Publish的AC_RunActiveContent.js例子;
AC_FL_RunContent( 'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0', 'base', '.', 'width', '500', 'height', '300', 'src', 'test', 'quality', 'high', 'pluginspage', 'http://www.macromedia.com/go/getflashplayer', 'align', 'middle', 'play', 'true', 'loop', 'true', 'scale', 'showall', 'wmode', 'window', 'devicefont', 'false', 'id', 'test', 'bgcolor', '#ffffff', 'name', 'test', 'menu', 'true', 'movie', 'swf/test', 'salign', '' ); //end AC code
|