[as2] 載入外部圖片,port不同時,愈到的問題

這是一個很少見的問題,困擾我將近一個月

不過終於給我解決了

分成兩個部分

一、匯入圖片,以及縮放

二、跨網域的設定

這兩個我都參照官方文件連結

一、

載入外部的SWF、JPEG、GIF 及 PNG

http://www.adobe.com/livedocs/flashlite/2_tw/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000703.html

然後使用onLooadInit監聽完成

http://www.adobe.com/livedocs/flashlite/2_tw/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00000710.html

必須先load進來再縮放,不然會縮放後,置入圖片,被複寫長寬,等於沒縮放

.

所以寫出來的就這樣

//要替換的元件
this.createEmptyMovieClip("image_mc", this.getNextHighestDepth());

//下載完之後再縮放
var mclListener:Object = new Object();
mclListener.onLoadInit = function(target_mc:MovieClip) {
    target_mc._width = 80;
    target_mc._width = 60;
};

var image_mcl:MovieClipLoader = new MovieClipLoader();
image_mcl.addListener(mclListener);
image_mcl.loadClip("目錄/目標.jpg", image_mc);

.
不過我這次遇到的問題是,圖片怎麼都無法開啟
我先說狀況一:
假設你做好了album1.swf,從同目錄獨取檔案1.jpg
傳到網路上,一切都很好
可是,今天如果你想要在page.htm中內嵌album1.swf,為了方便整理,開了一個album資料夾,所以page.htm讀取album/album1.swf,album1.swf讀取1.jpg
這樣子會讀不到jpg:
因為就使用者來看,page.htm嵌的flash,ok,可是flash想要讀取"跟他同目錄下的1.jpg",也就是page那層目錄,是找不到的
正確寫法必須在flash中指向,讀取album/1.jpg才行,這會造成ctrl+enter反而無法預視,必須到網頁模式下才能正確預覽
.
不過,我今天遇到的問題更複雜

image_mcl.loadClip("http://localhost:8080/1.jpg", image_mc);
也就是apache架在8080上

當我輸入http://localhost:8080/album1.swf,就讀不到圖 而輸入http://127.0.0.1:8080/album1.swf,就可以!!! 超玄的

最後開firefox使用HttpFox做傳輸分析(還不到封包分析,只是網頁端get和post和元件讀取的資訊判斷) 發現這行

431 GET /crossdomain.xml HTTP/1.1
回傳Error loading content (NS_ERROR_DOCUMENT_NOT_CACHED)
查了資料發現
http://livedocs.adobe.com/flash/9.0_tw/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001085.html#mce_temp_url#
同一個主機,不同port 不同port對flash而言就是不同的server,等於不是讀取相對路徑而是絕對路徑

不同主機,對flash而言就是不同網域,會檢查server的安全原則是否允許外連

所以必須新增crossdomain.xml
<?xml version="1.0"?>
<!-- http://www.adobe.com/crossdomain.xml -->
<cross-domain-policy>
    <allow-access-from domain="允許的網域或ip填這裡" />
</cross-domain-policy>
這樣子應該就行了
大概吧
廣告

3 thoughts on “[as2] 載入外部圖片,port不同時,愈到的問題

  1. 我是想这样做的:jsp页面传一个图片的地址给flex,在flex界面中来显示这张图片。访问的时候报Error loading content (NS_ERROR_DOCUMENT_NOT_CACHED)我把crossdomain.xml文件已经放到tomcat中了。能给我个详细的例子吗??看的不是很明白。谢谢

    1. 我的環境和你說的不太一樣,不過,我之前有做過一個jws+flash developer的小程式,使用xml socket溝通。

      當時我讀了幾個文件,你可以參考看看
      adobe開發人員
      http://www.adobe.com/devnet/flashplayer/articles/socket_policy_files.html

      大陸
      http://www.erabillow.com/blog/post/158.html
      http://dev.firnow.com/course/4_webprogram/xml/xml_js/2008515/116319.html

      因為我是xmlsocket傳輸所以用port來傳遞crossdomain,我倒是沒有研究如何靠jsp傳輸文件。你可能要自己試試看

迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s