
製作中のとあるフルFlashサイト。ブラウザで普通に確認してる分には問題なく動作していたため全く気がつかなかったが、Firefoxのエラーコンソールを開いてみると「Error calling method on NPObject」というJavaScriptエラーが頻発!「なんじゃこりゃ」ということで早速調べてみたところ、原因がわかりました。
まず、今回のサイトは以下のような条件が揃っていました。
- SWFファイルのドメインと、そのSWFファイルを埋め込んで表示するHTMLファイルのドメインが異なっている(SWFは http://www.hogehoge.home/movie.swf にあり、HTMLファイルは http://user.hogehoge.home/index.html にある、というような感じ)
- マウスホイール対応のためにSWFWheelを使用
- SWFファイルの埋め込みにSWFObjectを使用
そしてSWFWheelのサイトを見ていたところ、以下のような注意書きが:
その他
外部ドメインからの読み込み
SWFWheelを使ったswfファイルを、外部ドメインから読み込む場合、HTML側とActionScript側の両方でExternalInterfaceの動作を明示的に許可する必要があります。
- HTML側にて、paramタグ及びembedタグでallowScriptAccessの値にalwaysを指定する。
- ActionScript側にて、Security.allowDomain等で許可するドメインを指定する。
ビンゴですね。1.の方は対応済みだったんですが、2.の方が未対応でした。ところで今回のサイト、サブドメインの数が一定でなく、運用後に随時追加される可能性があります。ので、ワイルドカードを使って以下のようなコードを追加。
Security.allowDomain("*.hogehoge.home");
結果は・・・?ダメでした。まだエラーが出ます。うーん、もしかしてワイルドカードでサブドメインを指定するのは無理なのか?ということで、今度は以下のコードで実験。
Security.allowDomain("*");
成功!エラーがでなくなりました。全ドメインを対象にしてしまうのは危険といえば危険ですが、現時点ではこれが最善の策でしょうか。
