アプリ版:「スタンプのみでお礼する」機能のリリースについて

皆様こんにちは。
WEB作成初心者で常識的な質問でしたら大変申し訳ございませんが、調べてみてもどうしても解決できなかった為ご質問させて頂きました。どうかご教授お願いいたします。

タイトルのとおり、Flash側からjavascriptをコールしたいのですが、

swf側
on(press){
getURL("javascript: a()");
}

html側
function a(){
alert('alert!');
}

のような例の場合、htmlファイルとswfファイルが同じディレクトリ内にある場合は警告ウィンドウがきちんと表示されるのですが、swfを別サーバーに置いてそれを呼び出しているhtmlの場合は警告ウィンドウが表示されません。

私がgetURLの仕様を知らないだけなのかもしれませんが、別サーバーにあるswfファイルをロードしているようなページの場合、どのようにすれば呼び出し元htmlを表示しているウィンドウに対してjavascriptをコールする事が出来ますでしょうか?

お手数をおかけしますがご教授頂ければ幸いです。

A 回答 (1件)

Flash Player 6 以降は、ドメイン間のセキュリティ保護機能が導入されています。


HTML で記述された JavaScript を Flash 側から呼び出す際は、swf ファイルと HTML ファイルが同じドメイン(端的に言うと同じサーバー)に存在しているかどうかが、重要なポイントになります。

別のサーバーにある swf ファイルと HTML ファイル間でやりとりを行う、つまり、HTML ファイルがあるサーバーとは違うサーバーにあるムービーを表示している場合、そのムービーから HTML ファイルに書かれている JavaScript を実行できるようにするかどうかは、ムービーではなく HTML のタグの方に秘密があります。
普通にパブリッシュすると、ムービーを表示するためのHTMLファイルも一緒に作成されます。この HTML ファイルを、メモ帳などで開いてみてください。
<object> ~ </object> で囲まれている部分が、Flash ムービーを表示するためのタグです。
この中に、

 <param name="allowScriptAccess" value="sameDomain" />
 <embed src=・・・ allowScriptAccess="sameDomain"

という箇所があるかと思います。
この中の”sameDomain”の部分を、2箇所とも、”always”に変更してください。別のサーバーにある swf ファイルからでも、この HTML で記述されている JavaScript を実行できるようになります。

ちなみに、デフォルトである”sameDomain”とは、swf ファイルと HTML ファイルが同じドメインに存在している場合に限り、swf ファイルと HTML ファイルとの間でスクリプトの実行を許可する、という意味です。
同じディレクトリ内にある時は正常なのに、違うサーバーにムービーを置くと動かなくなるのは、このような理由によるものです。
なお、sameDomain にした場合でも、サーバーが同じであればいいだけなので、同じサーバー内にあるムービーと HTML ファイルならば、別のフォルダにあってもスクリプトは実行されます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
なるほど~swfの呼び出し側のタグだったのですね・・
ムービー側ばかりに気が行ってswf呼び出し側のタグも
一つ一つに意味があるものなのにFlashのパブリッシュ機能に任せて当たり前のように使っておりました。
大変丁寧で分かりやすくご回答して頂きましてありがとうございました。
大変勉強になりました。

お礼日時:2005/01/30 00:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!