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

先日のIEとFlashとJavaScriptと「カチッ」って音とExternalInterfaceクラスととで、IEでJavaScriptを呼び出すと「カチッ」音がでるというエントリーだったけど、7月参加したプロジェクト(フルFlash構築)で他社のアクセス解析をFlashと連携させる必要があったので、アクセス解析に接続するためのクラスを作ってみた。これを流用すればGoogleAnalytics用にも使えるはず(まだ試してないけど)。

このクラスの名前は、「アクセス解析」に「接続」なので、「AnalyticsConnector」とした。
まず、Flash内部ではこんなカンジで記述。
var myAC:AnalyticsConnector = AnalyticsConnector.getInstance();
a_mc.onRelease = function(){
    myAC.track("pageID");
}
このクラスはプロジェクトに対して1つという関係が前提というのが多いので、インスタンスを複数作らせないために Singleton パターンで構築してみた。よくわからない人はデザインパターンを夜露死苦。
また、アクセス解析を行う track() というメソッドは、対象のアクセス解析によってクラス自体を修正して下さい。今回の使用したアクセス解析では好きなページIDを使うことができたので、このようにしてみた。

続いて、クラスのソースはこんなカンジ。ただし対象は、Player8 から。ExternalInterface使ってるからっす。
import flash.external.*;

class AnalyticsConnector{
	
	private static var instance:AnalyticsConnector;
	static var isIntefaceAvailable:Boolean;
	
	private function AnalyticsConnector(){
		if(System.capabilities.os != "MacOS"){
			isIntefaceAvailable = ExternalInterface.available;
		}else{
			isIntefaceAvailable = false;
		}
	}

	static function getInstance():AnalyticsConnector{
		if(!AnalyticsConnector.instance){
			AnalyticsConnector.instance = new AnalyticsConnector();
		}
		return AnalyticsConnector.instance;
	}
	
	
	
	function track(pageID:String){

		if(isIntefaceAvailable){
			ExternalInterface.call("testJS", pageID);
		}else{
			var js:String = "javascript: testJS('" + pageID + "');";
			getURL(js);
		}
		
	}
	
}
上述してますが、 track() で連動するJSはアクセス解析によって変更してもらえれば。なお、このサンプルではJSの testJS() という関数を呼び出してる。

さて、注意してほしいのは、最初に Flash8 から加わった ExternalInterface クラスを import するため、FlashPlayer のバージョンが8よりも低い場合は使用することができないということ。
あくまでも「カチッ」という音を消しつつJSを呼び出すことがメインなので、Player のバージョンが7以前であれば、普通に getURL だけのクラスを作るなりして対応をたのんます。

また、最初に MacOS で分岐しているのは、MacIEの挙動が怪しかったからです。今回は音がメインで、MacではIEだろうとSafariだろうと音がでないので、ExternalInterface じゃなくて gertURL を使うことに。

いやぁ今回は、デザパタ使ってみたりブラウザの挙動と戦ってみたりと、いろいろ勉強になったなぁ~

Trackbacks

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

Send Your Comment