ActionScriptと他ドメインのファイルでデータをやりとりする際によく引っかかってしまうのが

*** セキュリティ Sandbox 違反 ***  互換性のないコンテキストにアクセスを試みました。

と表示されてアクセスを拒否されてしまうことです。

ということで、ひっかかってしまう処理として考えられる

  • XMLをロードする
  • ActionScriptからJavaScriptを呼び出す
  • JavaScriptからActionScriptを呼び出す

について違反回避方法をまとめてみたいと思います。

XMLをロードする

他ドメインからXMLをロードする際には参照先のドメインのルートディレクトリに crossdomain.xmlというファイルを置いておきます。

crossdomain.xmlには

<cross-domain-policy> <allow-access-from domain="参照先ドメイン1" /> <allow-access-from domain="参照先ドメイン2" /> . . . </cross-domain-policy>

を記述します。

ActionScriptからJavaScriptを呼び出す

違うドメインにあるJavaScriptをFlashムービーから呼び出す場合もありますが、その場合にも設定しなければならない項目があります。 Flashを表示する際のHTMLタグの<object>タグの中に

<param name="allowScriptAccess" value=*** /> <embed allowScriptAccess="***" />

を記述しておきます。 ***には

  • 常にActionScriptからJavaScriptを呼び出せる"always"
  • swfとHTMLが同じドメインにある場合のみ呼び出せる"sameDomain"
  • 常にActionScriptからJavaScriptを呼び出せない"never"
が入ります。

JavaScriptからActionScriptを呼び出す

JavaScriptからActionScriptを呼び出す際にはFlash側に

System.security.allowDomain(***); //***にはアクセスするJavaScriptが置いてあるドメインを記述

を設定しておきます

以上簡単ですがまとめてみました。

Flash Player 7からはwww.cuppy.co.jpとlevel0.cuppy.co.jpのようなサブドメインでもセキュリティにひっかかってしまうので上記のような設定が必要になることが多いと思います。参考にしていただけると幸いです。

HTML5飯