こんにちはtaro(@9re)です。

唐突ですが、僕は(可能なら)APIは相対派です。でもたまに困ることがあります。

結論

SWFからの相対アドレスは、SWFの置かれているドメインじゃなくて、HTMLのドメイン

実際に動くコードをみてみます。

var req:URLRequest = new URLRequest;
req.url = '/index.xml'; // <- relative url
var ldr:URLLoader = new URLLoader;
ldr.addEventListener(Event.COMPLETE, function complete(e:Event):void {
    ldr.removeEventListener(Event.COMPLETE, complete);
    onRSSLoaded(XML(ldr.data));
});
ldr.addEventListener(SecurityErrorEvent.SECURITY_ERROR, showError);
ldr.addEventListener(IOErrorEvent.IO_ERROR, showError);
ldr.load(req);

'/index.xml'にRSSが置かれているとして(_level0はそうですね)、RSSをロードします。

wonderflでコンパイルして、ブログ・パーツを貼りつけてみます。

このブログ・パーツはiframeを作って中身は、http://wonderfl.net/blogparts/brRpになります。

Relative URL from SWF - wonderfl build flash online

実行してみると、相対アドレス'/index.xml'はHTMLのドメインwonderfl.netをみて、wonderfl.net/index.xmlを読み込もうとします。

では、今度は_level0にブログパーツで埋め込んでいるswfをswfobjectを用いて直接貼りつけてみます。

<div id="relative_url_from_swf"></div>
<script src="swfobject.js" type="text/javascript"></script>
<script type="text/javascript">
swfobject.embedSWF(
 "http://swf.wonderfl.net/swf/usercode/5/50/503e/503e2cc8b50ef6f2a8bcaec5787a0a0cf89f96d1.swf",
  "relative_url_from_swf",
  "465", "465",
  "10.0.0",
  false, {}, {}, {});});
</script>

どうでしょう。実際に_level0のRSSを見ています。なので・・・

 

相対アドレスでアクセスしていてもクロスドメインになってることがある!

 

mx.rpc.http.HTTPServiceからだと・・・

mx.rpc.http.HTTPServiceではそのように設計してあるのか、相対アドレスはSWFのURLに対して相対となります.エラー内容を確認してみてください。swf.wonderfl.net/index.xmlに対するioErrorです。

Relative URL for HTTPService - wonderfl build flash online

なんとも奇怪です・・・。では、またー

HTML5飯