AIRのシームレスインストール


AIRシームレスインストールはbadge.swfを使って行います。そのやり方のメモ。

badge.swfはFlexSDKインスコしたところに入ってます。

例えばWindowsならば、C:\Program Files\Adobe\Flex Builder 3 Plug-in\sdks\3.0.0\samples\badgeみたいな感じ。



あ、シームレスインストールとはブラウザからAIRアプリケーションをインスコするやつのことです。いわゆるFlashインスコと同じ感じ。

これがないと基本的に多分案件で使うのはなかなかめんどいことかと思われます。


AIRシームレスインストールは制約があって、Flash Player9 update3以降じゃないと動きません。


インスコ方法は2つ。
badge.swfとobjectタグだけをつかってインスコする方法と、SDK付属のインスコjavascriptを叩く方法です。


んじゃあまずはbadge.swfとobjectタグだけをつかってインスコする方法から。

これは基本的に白石さんの、今から始めるAIRプログラミング第15回のとおり。

ポイントはparamタグでもembedタグでもflashVars属性で、少なくとも以下のようにしないといけない。

  • AIRのURL設定
  • AIRのバージョンの設定
  • imageにはかわいいものを使うこと
<html>
<body>
<object id="badge"
  width="217" height="180" align="middle"
  codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"
  classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000">

  <param name="allowScriptAccess" value="all"/>
  <param name="movie" value="badge.swf"/>
  <param name="quality" value="high"/>
  <param name="bgcolor" value="#FFFFFF"/>
  <param value="appurl=http://localhost:8080/aaa/badge/NekoBeanSlider.air&airversion=1.1&buttoncolor=008811&messagecolor=000000&imageurl=nekobean.png" name="FlashVars"/>
  <embed
    width="217" height="180" align="middle"
    flashvars="appurl=http://localhost:8080/aaa/badge/NekoBeanSlider.air&airversion=1.1&buttoncolor=008811&messagecolor=000000&imageurl=nekobean.png"
    pluginspage="http://www.macromedia.com/go/getflashplayer"
    type="application/x-shockwave-flash"
    allowscriptaccess="all"
    name="badge" bgcolor="#FFFFFF" quality="high" src="badge.swf"/>
</object>
</body>
</html>


次に付属のシームレスインストールの付属js(AC_RunActiveContent.js)を使う方法。こちらはサンプルからポイントだけ記載しておくます。
まあごちゃごちゃしてっけど、ポイントは変わらなくて、

  • AIRのURL設定
  • AIRのバージョンの設定
  • imageにはかわいいものを使うこと

で、AC_FL_RunContentに渡すこと。ちなみにこのスクリプト、きちんとnoscriptのときでもがんばる感じになってる。

	<script src="AC_RunActiveContent.js" type="text/javascript"></script>
	<script language="JavaScript" type="text/javascript">
	<!--
	// Version check based upon the values entered above in "Globals"
	var hasReqestedVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);

	// Check to see if the version meets the requirements for playback
	if (hasReqestedVersion) {
		// if we've detected an acceptable version
		// embed the Flash Content SWF when all tests are passed

		AC_FL_RunContent(
			'codebase','http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab',
			'width','217',
			'height','180',
			'id','badge',
			'align','middle',
			'src','badge',
			'quality','high',
			'bgcolor','#FFFFFF',
			'name','badge',
			'allowscriptaccess','all',
			'pluginspage','http://www.macromedia.com/go/getflashplayer',
			'flashvars','appname=NekoBeanSlider&appurl=http://localhost:8080/aaa/badge/NekoBeanSlider.air&airversion=1.1&imageurl=nekobean.png',
			'movie','badge' ); //end AC code

	} else {  // Flash Player is too old or we can't detect the plugin
		document.write('<table id="AIRDownloadMessageTable"><tr><td>Download <a href="myapp.air">My Application</a> now.<br /><br /><span id="AIRDownloadMessageRuntime">This application requires the <a href="');
		
		var platform = 'unknown';
		if (typeof(window.navigator.platform) != undefined)
		{
			platform = window.navigator.platform.toLowerCase();
			if (platform.indexOf('win') != -1)
				platform = 'win';
			else if (platform.indexOf('mac') != -1)
				platform = 'mac';
		}
		
		if (platform == 'win')
			document.write('http://airdownload.adobe.com/air/win/download/1.0/AdobeAIRInstaller.exe');
		else if (platform == 'mac')
			document.write('http://airdownload.adobe.com/air/mac/download/1.0/AdobeAIR.dmg');
		else
		document.write('http://www.adobe.com/go/getair/');

			
		document.write('">Adobe&#174;&nbsp;AIR&#8482; runtime</a>.</span></td></tr></table>');
	}
	// -->
	</script>


とまあどちらでもいけますよ、と。さくっとやりたいときはhtmlでささっと書いて、まじめに作るときには
FlexSDKのやつ使えばいいんじゃないかな。どっちもたいした手間じゃないと思う。


で、結果こんな感じ。




http://d.hatena.ne.jp/c9katayama/20080604/1212563971のねこびーんスライダーをAIRアプリにしてみた。


ちょっとわかんなかったのが、AIRアプリのURL指定が相対だと駄目なのかな?なんかうまくいかなかった。
なんでURL完全指定でしてます。