现在的位置: 首页 > 综合 > 正文

网页中的flash加载资源时的路径相对于谁?

2013年06月23日 ⁄ 综合 ⁄ 共 1293字 ⁄ 字号 评论关闭

在项目中出现了一个问题,一个flash播放器支持两种播放方式,flv路径直接播放和xml播放列表式播放。

 

将swf、flv、播放列表放在同一文件夹A,swf直接以文件名称来访问flv和播放列表,然后嵌入播放的网页放在flv路径和xml播放列表文件的上层文件夹B中,结果使用flv路径的能正常播放,而使用播放列表的却无法播放。最后发现,播放时网页向服务器发送的get信息中flv路径(A/***.flv)是正确的相对于网页的路径,而播放列表的get消息中的路径(***.xml)却是相对于html网页的,也就是直接就是名称。

原因不详,日后有空再研究,解决办法嘛,在swf中加载任何资源都将其扩展成绝对路径。

 

 

11月11日追:

(今天又在某处看到了以下资料,不过这种解决方案要求使用者去解决此问题, 而不是flash的提供者去解决,虽然麻烦一点,我还是喜欢上面的解决方案)

有載入外部資源的都知道,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>

 

 

抱歉!评论已关闭.