IEとFlashとJavaScriptと「カチッ」って音とExternalInterfaceクラスと

FlashからJavaScriptを呼び出すとき、通常は次のようなActionScriptを記述するはず。
button_mc.onRelease = function(){
	var js:String = "javascript: showMsg('Hello World!!');";
	getURL(js);
}

この例だとボタンをクリックした時を想定してるけど、イベントハンドラを変更すればいつでもロールオーバーでもロールアウトでも好きなタイミングで実行できる。しかし、ずぅーと解決できなかった問題が1つつあって、それは、IEでFlashからJSを呼び出すときに必ず「カチッ」という音がなるという点。
あ、この音は、IEでリンクをクリックしたりする時に流れる効果音で、Windowsでその他ブラウザやMac環境では無音ね無音。IEだけの問題。

まぁ、クリック時に呼び出すJSだとかならマシなんですが、ロールオーバーした時にJSを実行したい場合など、ものすごくこの音が邪魔になります。最近はGoogleAnalyticsとFlashの連携などで、ロールオーバーで作動するJSもよく話に出てくるんですが、この音のせいで実装まではいかないという非常に困った状況なのよコレ。

んでアレコレ実験してたよ。
結論から言うと、Player8から使えるExternalInterfaceクラスを使用すると、この「カチッ音」は鳴らなくなる!!

上と同様に、JS側で記述している関数を呼び出す場合は、
import flash.external.*;
button_mc.onRelease = function(){
	ExternalInterface.call("showMsg('Hello World!!')");
}
とやるだけでOK。

これを用いるだけで確かにどのイベントハンドラであろうと「カチッ音」はないんだろうけど、その代わりに古いFlashPlayerとブラウザを見切る必要があるのが難点かも。そもそもバージョン8未満のPlayerでは使えないわ、Playerが8でも古いブラウザでは動作しないものも多いし。

このクラス使うときは、自分で適当なクラスを設けて、そのクラスの内部でPlayerのバージョンを取得し、条件分岐で、ExternalInterfaceかgetURLにするか決める必要がありそう。

世間がAS3とか言い出している中、自分の時代遅れっぷりがたまらなく感じるエントリーでした!

Trackbacks

Trackback URL: http://blog.naggg.jp/mt/mt-tb.cgi/24

Send Your Comment