Luar's Flash Playground:Flash Player 7載入外部數據的壞消息和好消息
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)

本文章由發表。
意見
"; print "沒有意見。
 "; } ?>
  • 要指定是 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發表

同組文章