Luar's Flash Playground:Flash Player 7載入外部數據的壞消息和好消息
新聞(101)
觀點或評論(94)
Flash書(63)
教程(72)
Design Patterns(3)
FlashCom筆記(47)
Flash Remoting筆記(27)
Flex筆記(11)
Flash Lite筆記(14)
PHP資訊(23)
Ajax筆記(9)
習作(50)
組件(16)
酷站(32)
學習資源(28)
書籍推介(15)
本站與我(91)
RSS瀏覽器
聯絡
熱愛鑽研
Ajax
ActionScript
Flash
Flash Lite
Flex
Flash Remoting
FlashCom
Director
Lingo
PHP
Multiplayer Game

搜尋
VCASMO
Flash Player 7載入外部數據的壞消息和好消息 (12-09-2003)

在Flash Player 6或以前,利用loadVariables()、loadVariablesNum()、LoadVars()、XML.load()等載入外部數據,是不可以跨Domain,即在domainA.com的Flash不可以載入在domainB.com的數據(需要通過Middleware作中間人)。但載入Sub Domain的數據是容許,即放在www.luar.net、luar.net、foo.luar.net的Flash都可以載入在此3個不同的Sub Domain的數據。

Flash Player 7卻帶來了壞消息,它收緊了安全政策,載入Sub Domain的數據是不容許,不過這只對使用了Absolute Path的Flash有影響,例如loadVariablesNum("http://www.domainA.com/data.txt", 0),一般Web Server都可以設定短網址,例如http://domainA.com,如果Flash通過短網址載入,那麼載入外部數據就會受到影響。

Flash 6版本的Flash,在Flash Player 7播放會出現警告字句,需要訪客決定是否准許載入外部數據:
crossDomainAlert.gif

Flash 7版本的Flash,在Flash Player 7播放就索性沒有警告字句,根本載入外部數據的動作已經被否決了。

解決方法,製作一個名叫crossdomain.xml,放在外部數據的Server的root,即http://www.domainB.com/crossdomain.xml。XML文件裡,有一行:

<allow-access-from domain="" />

你可以自行加入容許路徑,例如:

<allow-access-from domain="*" />
<allow-access-from domain="luar.net" />
<allow-access-from domain="www.luar.net" />
<allow-access-from domain="*.luar.net" />

通過加入crossdomain.xml,因此也帶來一個好消息Flash Player 7可以載入跨Domain的外部數據!無論是Flash 6或7版本的Flash,只要在Flash Player 7播放,domainB.com的Server有crossdomain.xml這文件,裡面有:

<allow-access-from domain="*.domainA.com" /> 或
<allow-access-from domain="*" /> 容許任何domain

在domainA.com的Flash就可以載入它的數據。

補充
Flash MX 2004 Professional提供了Data Binding, Web Services組件,網絡上有不少免費公開的Web Services,但是因為Flash Player 7這安全政策,根本得物而無所用,真荒謬!(除非那些Web Services網站可以加入crossdomain.xml)

本文章由發表。
意見
  • 要指定是 crossdomain.xml 檔案嗎?

    由小初子於12-09-2003發表

  • 如果是先由後端 (Remoting or something else) call Web Service 進來以後再由 Flash 連同主機的後端應該還是可以用吧? 可以嗎?

    不能直接用的確是壞消息...

    Bob Chao於18-09-2003發表

  • 如果使用...System.security.allowDomain("someSite.com");
    這樣是否就可以讀取自己指定的不同網域呢??

    由kyle於19-09-2003發表

  • No

    luar於19-09-2003發表

  • 我試過不行,不知做得對不對?
    假設flash文件在www.swf.com上.
    調用www.Server.com上的數據.
    具體做法:
    把crossdomain.xml(在這里下載的),放在http://www.Server.com/crossdomain.xml上,在www.swf.com的Flash無法載入它的數據。flash用的是6的版本,瀏覽器用6和7的版本都不行.
    我找不到他們的必然聯系,添加一個crossdomain.xml文件就可以調用,服務器端如何確認www.swf.com的調用是允許的?用什麼來讀取crossdomain.xml文件?
    在http://www.macromedia.com/.../load_xdomain.htm看到的是另外的兩個方法,也不明白?
    現在只有一種方法可以調用,就是在本地直接運行swf文件.

    由goo於19-10-2003發表

  • 這crossdomain.xml只適用於Flash 7 swf

    luar於19-10-2003發表

  • 我現用Flash 6 swf 過Middleware中間domainA.com支脚本語言asp與php有 關範例嗎?
    謝謝
    Flash 7不用能用 WebServiceConnector不過這個東 生還望書中能夠講詳細些

    由goo於19-10-2003發表

  • 我用一個方法解決了wsdl的跨聯結方式,但是是用coldfusion...不知道php有否可以呼叫wsdl的服務,如果可以說不定也可以這樣解決一些跨網問題...

    kyle於02-11-2003發表

  • PHP可以用NuSOAP作Web Services Proxy

    luar於07-12-2003發表

  • 這個策略真是該死,如果做一個專門提供類似服務的網站,這個xml不是要暴大.不合理.
    如果這個認證文件可以是動態的就好了,提交一個參數,自動返回一個xml.

    Semon於26-04-2004發表

  • 請問如果是php程式如何解決
    我在本機使用var myLoadVarsx:LoadVars = new LoadVars();
    myLoadVarsx.load("http://abc.fbs.com.tw/get_value.php? type=1&ids="+query_stock_ids);
    取的到值
    但是丟到另一台server卻沒辦法取到值,請問是哪裡出了問題

    由jason於19-08-2004發表

同組文章

Movable Type 4.32-en系統支持,Luar's Production版權所有。