<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jp.ikekou.blog.Main</title>
	<atom:link href="http://ikekou.jp/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://ikekou.jp/blog</link>
	<description></description>
	<lastBuildDate>Wed, 13 Jan 2010 17:09:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQueryのセレクタを簡単に試すブックマークレット</title>
		<link>http://ikekou.jp/blog/archives/317</link>
		<comments>http://ikekou.jp/blog/archives/317#comments</comments>
		<pubDate>Wed, 13 Jan 2010 14:11:42 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=317</guid>
		<description><![CDATA[jQueryを使う場合に、まずやるのはセレクタの記述です。
その際にちょっと楽になるブックマークレットがあります。
有名なサイトにあるものなので、もうご存知の方も多いと思いますがまだ知らない人のために紹介します。
htt [...]]]></description>
			<content:encoded><![CDATA[<p>jQueryを使う場合に、まずやるのはセレクタの記述です。<br />
その際にちょっと楽になるブックマークレットがあります。</p>
<p>有名なサイトにあるものなので、もうご存知の方も多いと思いますがまだ知らない人のために紹介します。</p>
<p><a href="http://semooh.jp/jquery/ref/cont/selectors/" target="_blank">http://semooh.jp/jquery/ref/cont/selectors/</a></p>
<p>にある&#8221;jQuery Selectors Inspector&#8221;の部分のブックマークレットをブックマークして、実行すると入力ダイアログが出ます。</p>
<p>そこに試したいセレクタを書いて実行すると、該当個数が表示され、該当部分が点滅します。</p>
<p>対象の要素の状態（CSS）によってはうまく点滅してくれない場合もありますので、点滅してくれなくても必ずしも間違っているとは限りません。個数は正しいはずです。<br />
が、非常に便利なので是非活用して下さい。</p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/317/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progression 4.0.1 Public Beta 1.3 追加機能① PreloadSWFクラス</title>
		<link>http://ikekou.jp/blog/archives/292</link>
		<comments>http://ikekou.jp/blog/archives/292#comments</comments>
		<pubDate>Tue, 12 Jan 2010 03:58:24 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=292</guid>
		<description><![CDATA[本日2010年1月12日、『Progression 4.0.1 Public Beta 1.3』がリリースされました。ぱちぱちぱち。
今回個人的にうれしい機能色々なので、勝手に紹介します。
導入について
注意しないといけ [...]]]></description>
			<content:encoded><![CDATA[<p>本日2010年1月12日、<a href="http://progression.jp/ja/download/prerelease/">『Progression 4.0.1 Public Beta 1.3』がリリースされました</a>。ぱちぱちぱち。</p>
<p>今回<em>個人的にうれしい機能色々</em>なので、勝手に紹介します。</p>
<h3>導入について</h3>
<p>注意しないといけないことというわけではありませんが僕が一瞬ひっかかった点があったので書きます。<br />
ダウンロードしたファイル名は&#8221;Progression-ja-CS3.mxp&#8221;となっており、<em>「あれ？CS4は？」</em>と思われる方もいるかもしれませんが、<em>これはCS3以上という意味なので、CS4も同じmxpで大丈夫</em>。（とnium先生に教えてもらいました。）</p>
<h3>追加機能① PreloadSWFクラス</h3>
<p>LoadCommandで使用するクラスで、<em>&#8220;PreloadSWF&#8221;というクラスが追加されました</em>。<br />
リリースノートには以下のようにあります。</p>
<blockquote><p><em>CastPreloader クラスの CastEvent.CAST_LOAD_START イベント内で、読み込まれる本体の監視処理を可能にする PreloadSWF クラスを追加しました。</em></p></blockquote>
<p>これがどう便利かというと、Preloader内でIndex.swfと外部画像等を読み込む仕様の場合のロード進捗管理が大変楽になります。</p>
<p>とりあえず</p>
<ul>
<li>Preloader.swf内でXMLを読み込む</li>
<li>それをもとに画像を読み込む</li>
<li>その画像とindex.swfとの合計を100%として進捗表示をする</li>
</ul>
<p>という場合をサンプルとして、具体的にコードで示します。</p>
<p>まずPreloadSWFがない場合のコードです。</p>
<h4>PreloadSWFがない場合のPreloader.as</h4>
<pre class="brush: as3">
package {
	import flash.net.*;
	import jp.progression.casts.*;
	import jp.progression.commands.display.*;
	import jp.progression.commands.lists.*;
	import jp.progression.commands.net.*;
	import jp.progression.commands.tweens.*;
	import jp.progression.commands.*;
	import jp.progression.data.*;
	import jp.progression.events.*;
	import jp.progression.executors.*;

	public class Preloader extends CastPreloader {

		private var _loadImageLength:Number;
		private var _myLoaderList:LoaderList;

		public function Preloader()
		{
			// プリローダーが読み込むファイルと、実行形式を指定します。
			super( new URLRequest( "index.swf" ), false, CommandExecutor );
		}

		override protected function atReady():void
		{
		}

		override protected function atCastLoadStart():void
		{
			addCommand(
				//XML読み込み
				new LoadURL(new URLRequest("assets/xml/images.xml")),

				function()
				{
					//XMLから情報取得
					//今回は画像の枚数が記述してある
					var myXml:XML = new XML(this.latestData);
					_loadImageLength = myXml.images.@_loadImageLengthgth;

					//LoaderListを生成
					//進捗表示用にonProgressイベント設定
					_myLoaderList = new LoaderList(
						{
							onProgress:function():void
							{
								//index.swfも含めた進捗を出したいので、分母を1個多くパーセントを換算する
								var tmpPercent:Number = this.percent / (_loadImageLength + 1) * _loadImageLength;

								//進捗表示
								trace(tmpPercent);
							}
						}
					);

					//XMLから取得した情報をもとに画像読み込みのLoadBitmapDataコマンド生成
					//LoaderListに追加
					var n:int = _loadImageLength;
					for (var i:int = 1; i <= n; i++)
					{
						_myLoaderList.addCommand(
							new LoadBitmapData(new URLRequest("assets/images/" + i.toString() + ".jpg"))
						);
					}

					//LoaderListを親であるSerialListに追加
					this.parent.addCommand(
						_myLoaderList
					);
				}
			);
		}

		override protected function atProgress():void
		{
			//進捗更新
			//index.swfの進捗を、画像の枚数+index.swfで100%となるよう、割る
			var tmpPercent:Number = _loadImageLength / (_loadImageLength + 1) + bytesLoaded / bytesTotal / (_loadImageLength + 1);
			trace(tmpPercent);
		}

		override protected function atCastLoadComplete():void
		{
			addCommand(
			);
		}
	}
}
</pre>
<p>理系脳の人ならほんとはもっとスマートに書けそうですが、とりあえず目的は達成できます。<br />
文系脳である僕のロジックが馬鹿すぎてみなさんが理解できない場合のために一応解説します。</p>
<p>①まずXMLを読み込みます。するとそこには画像枚数が書いてあります。今回は計算しやすいように仮に9枚とします。</p>
<pre class="brush: as3">
new LoadURL(new URLRequest("assets/xml/images.xml")),
</pre>
<p>②LoaderListを生成します。</p>
<pre class="brush: as3">
_myLoaderList = new LoaderList(
</pre>
<p>③進捗管理のためonProgressを設定します。<br />
ここで表示されるパーセントは9枚で100%です。ですが、目的としてはindex.swfを加えたパーセントを出したいので、9枚で100%の計算でLoaderListが出してくれているパーセントを、全体がindex.swfを加えた10枚だったら何パーセントにあたるのか・・・と計算しなおします。よって画像を全部読み終わったら今回は進捗は90%まで来ます。</p>
<pre class="brush: as3">
onProgress:function():void
{
	var tmpPercent:Number = this.percent / (_loadImageLength + 1) * _loadImageLength;
	trace(tmpPercent);
}
);
</pre>
<p>④LoadBitmapDataコマンドを9個生成してLoaderCommandでまとめます。</p>
<pre class="brush: as3">
var n:int = _loadImageLength;
for (var i:int = 1; i <= n; i++)
{
	_myLoaderList.addCommand(
		new LoadBitmapData(new URLRequest("assets/images/" + i.toString() + ".jpg"))
	);
}
</pre>
<p>⑤先程のLoaderListで画像を全部読み終わると次はindex.swfの読み込みに進みます。ここではindex.swfの読み込み状況が出力されます。これは当然、index.swfひとつを読み込み終わると100%です。これを画像9枚とあわせた10枚で100%にしたいので、10で割ります。そいで90を足します。これで全体の進捗がわかります。</p>
<pre class="brush: as3">
var tmpPercent:Number = _loadImageLength / (_loadImageLength + 1) + bytesLoaded / bytesTotal / (_loadImageLength + 1);
trace(tmpPercent);
</pre>
<p>という感じです。<em>なんかめんどくさい</em>ですね。<br />
これを今回追加されたPreloadSWFを使って書いてみます。</p>
<h4>PreloadSWFがある場合のPreloader.as</h4>
<pre class="brush: as3">
package {
	import jp.progression.casts.*;
	import jp.progression.commands.display.*;
	import jp.progression.commands.lists.*;
	import jp.progression.commands.net.*;
	import jp.progression.commands.tweens.*;
	import jp.progression.commands.*;
	import jp.progression.data.*;
	import jp.progression.events.*;
	import jp.progression.executors.*;

	public class Preloader extends CastPreloader
	{

		/**
		 * 新しい Preloader インスタンスを作成します。
		 */
		public function Preloader()
		{
			// プリローダーが読み込むファイルと、実行形式を指定します。
			super( new URLRequest( "index.swf" ), false, CommandExecutor );
		}

		/**
		 * SWF ファイルの読み込みが完了し、stage 及び loaderInfo にアクセス可能になった場合に送出されます。
		 */
		override protected function atReady():void
		{
		}

		/**
		 * オブジェクトが読み込みを開始した瞬間に送出されます。
		 * このイベント処理の実行中には、ExecutorObject を使用した非同期処理が行えます。
		 */
		override protected function atCastLoadStart():void
		{
			addCommand(
				//XML読み込み
				new LoadURL(new URLRequest("assets/xml/images.xml")),

				function()
				{
					//LoaderList作成
					//進捗管理用にonProgress設定
					var myLoaderList:LoaderList = new LoaderList(
						{
							onProgress:function():void
							{
								//進捗表示
								trace(this.percent);
							}
						}
					);

					//XMLをもとに画像読み込み用のLoadBitmapDataを生成、LoaderListに追加
					var myXml:XML = new XML(this.latestData);
					var n:int = myXml.images.@length;
					for (var i:int = 1; i <= n; i++)
					{
						myLoaderList.addCommand(
							new LoadBitmapData(new URLRequest("assets/images/" + i.toString() + ".jpg"))
						);
					}

					//★
					//同じLoaderListにPreloadSWFも追加します。
					myLoaderList.addCommand(
						new PreloadSWF()
					);

					//画像とIndex.swfを読む込むLoaderListを親SerialListに追加
					this.parent.addCommand(
						myLoaderList
					);
				}
			);
		}

		/**
		 * ダウンロード処理を実行中にデータを受信したときに送出されます。
		 */
		override protected function atProgress():void
		{
		}

		/**
		 * オブジェクトが読み込みを完了した瞬間に送出されます。
		 * このイベント処理の実行中には、ExecutorObject を使用した非同期処理が行えます。
		 */
		override protected function atCastLoadComplete():void
		{
			addCommand(
			);
		}
	}
}
</pre>
<p>①XMLを読み込みます。</p>
<pre class="brush: as3">
new LoadURL(new URLRequest("assets/xml/images.xml")),
</pre>
<p>②画像とindex.swfを読み込むためのLoaderListを生成します。</p>
<pre class="brush: as3">
var myLoaderList:LoaderList = new LoaderList(
);
</pre>
<p>③進捗管理用にonProgressを設定します。先程と違い、this.percentが画像9枚+index.swf全体を100%として出力してくれるので、何も考える必要ありません。</p>
<pre class="brush: as3">
onProgress:function():void
{
	trace(this.percent);
}
</pre>
<p>④XMLをもとにLoaderListにLoadBitmapDataコマンドを追加していきます。</p>
<pre class="brush: as3">
var myXml:XML = new XML(this.latestData);
var n:int = myXml.images.@length;
for (var i:int = 1; i <= n; i++)
{
	myLoaderList.addCommand(
		new LoadBitmapData(new URLRequest("assets/images/" + i.toString() + ".jpg"))
	);
}
</pre>
<p>⑤さらに、同じLoaderListでindex.swfの進捗も管理したいので、<em>PreloadSWFも生成して追加します。</em></p>
<pre class="brush: as3">
myLoaderList.addCommand(
	new PreloadSWF()
);
</pre>
<p>という感じです。<br />
なんと、とてもわかやすい。<em>というか何も考えなくてよい！</em><br />
Progressionがどんどん進歩して、僕の脳はどんどん退化しそうです。</p>
<h3>まとめ</h3>
<p>今回追加されたPreloadSWFにより、画像等外部データとindex.swfの読み込みを一つのLoaderList内ですることができ、記述や管理が非常に簡単でわかりやすくなります。<br />
素晴らしいですね。</p>
<h3>サンプル</h3>
<p>一応サンプルソースを置いておきます。上記内容にTextField置いて進捗表示している程度ですが。<br />
<a href="http://ikekou.jp/blog/wp-content/uploads/2010/01/10011201.zip">サンプルをダウンロード</a></p>
<h3>ほかに</h3>
<ul>
<li>ResourcePrefecherクラス</li>
<li>Listenクラス</li>
<li>foreground、backgroundへのアクセス</li>
</ul>
<p>あたりがいいなって思うので、追って紹介したいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/292/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Progressionでmanagerがnullになるタイミングがある</title>
		<link>http://ikekou.jp/blog/archives/264</link>
		<comments>http://ikekou.jp/blog/archives/264#comments</comments>
		<pubDate>Wed, 06 Jan 2010 03:34:28 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=264</guid>
		<description><![CDATA[はじめに

Progressionで意図しないタイミングでmanagerがnullになります。
基礎中の基礎みたいなレベルなので、僕の組み方が悪いはずなのですが、どこが悪いのか見つけられません。
ということで賢い人誰か教 [...]]]></description>
			<content:encoded><![CDATA[<h3>はじめに</h3>
<p>
Progressionで意図しないタイミングでmanagerがnullになります。<br />
基礎中の基礎みたいなレベルなので、僕の組み方が悪いはずなのですが、どこが悪いのか見つけられません。<br />
ということで賢い人誰か教えてくれたらいいなエントリ。
</p>
<p>
ちなみに環境はこんなもんです。Progressionのバージョン以外あんまり関係ないと思いますけど。
</p>
<ul>
<li>Adobe Flash CS4</li>
<li>FlashPlayer10</li>
<li>Progression4.0.1</li>
</ul>
<h3>サンプル</h3>
<p>
<a rel="shadowbox;width=900;height=660" href="http://ikekou.jp/blog/wp-content/uploads/2010/01/10010601.swf">サンプルを開く</a><br />
traceがわりにTextFieldに出力しています。<br />
2度目の&#8221;[ ChildPage1 ] atCastAdded&#8221;の下の行のmanagerの出力が<br />
&#8220;manager : null&#8221;になってしまっています。
</p>
<h3>ソース</h3>
<p>
<a href='http://ikekou.jp/blog/wp-content/uploads/2010/01/rel_src_10010601.zip'>ソースをダウンロード</a><br />
ソースはサンプルとして極力単純化したつもりです。<br />
省略してますが、かいつまむと全体のソースはこんな感じです。<br />
2秒おきにChildScene1→ChildScene2と移動し、各ChildSceneではChildPageをAddしたりRemoveしたりしてるだけなつもりです。
</p>
<h4>IndexScene.as</h4>
<pre class="brush: as3">
public class IndexScene extends SceneObject
{
	private var _child1:ChildScene1;
	private var _child2:ChildScene2;
	private var _tf:CastTextField;

	public function IndexScene()
	{
		_tf = new CastTextField( { id:"output", x:600, width:200, height:600 } );

		_child1 = new ChildScene1("child1");
		_child2 = new ChildScene2("child2");

		this.addScene(_child1);
		this.addScene(_child2);
	}

	protected override function atSceneLoad():void
	{
		addCommand(
			new AddChild(container, _tf)
		);
	}

	protected override function atSceneInit():void
	{
		_tf.text += "\n" + "[ IndexScene ] atSceneInit";

		new SerialList(null,
			2,
			new Goto(_child1.sceneId),
			2,
			new Goto(_child2.sceneId),
			2,
			new Goto(_child1.sceneId),
			2,
			new Goto(_child2.sceneId)
		).execute();
	}
}
</pre>
<h4>ChildScene1.as (ChildScene2もクラス名以外は同じ)</h4>
<pre class="brush: as3">
public class ChildScene1 extends SceneObject
{
	private var _page:ChildPage1;
	private var _tf:CastTextField;

	public function ChildScene1( name:String = null, initObject:Object = null )
	{
		_page = new ChildPage1();
		_tf = getInstanceById("output") as CastTextField;
	}

	protected override function atSceneInit():void
	{
		_tf.text += "\n" + "[ ChildScene1 ] atSceneInit";
		_tf.text += "\n" + "manager : " + manager;

		addCommand(
			new AddChild(container, _page)
		);
	}

	protected override function atSceneGoto():void
	{
		_tf.text += "\n" + "[ ChildScene1 ] atSceneGoto";

		addCommand(
			new RemoveChild(container, _page)
		);
	}
}
</pre>
<h4>ChildPage1.as (ChildPage2もクラス名以外は同じ)</h4>
<pre class="brush: as3">
public class ChildPage1 extends CastSprite
{
	private var _tf:CastTextField;

	public function ChildPage1( initObject:Object = null )
	{
		_tf = getInstanceById("output") as CastTextField;
	}

	protected override function atCastAdded():void
	{
		_tf.text += "\n" + "[ ChildPage1 ] atCastAdded";
		_tf.text += "\n" + "manager : " + manager;
	}
}
</pre>
<p>
大体一般的なProgressionのソースです。と僕は思い込んでます。<br />
で、次にサンプルのtraceを見てみます。コメントをつけました。
</p>
<pre class="brush: as3">
[ IndexScene ] atSceneInit  		//IndexSceneに来た

[ ChildScene1 ] atSceneInit  		//ChildScene1に来た
manager : [Progression id="index"]  	//managerの参照あり
[ ChildPage1 ] atCastAdded  		//ChildPage1がAddChildされた
manager : [Progression id="index"]  	//managerの参照あり

[ ChildScene1 ] atSceneGoto  		//ChildScene1から離脱、ChildScene2に移動開始

[ ChildScene2 ] atSceneInit  		//ChildScene1に来た
manager : [Progression id="index"]  	//managerの参照あり
[ ChildPage2 ] atCastAdded  		//ChildPage2がAddChildされた
manager : [Progression id="index"]  	//managerの参照あり

[ ChildScene2 ] atSceneGoto  		//ChildScene2から離脱、ChildScene1に移動開始

[ ChildScene1 ] atSceneInit  		//ChildScene1に来た
manager : [Progression id="index"]  	//managerの参照あり
[ ChildPage1 ] atCastAdded  		//ChildPage1がAddChildされた
manager : null  			//★★★managerの参照なし★★★

[ ChildScene1 ] atSceneGoto  		//ChildScene1から離脱、ChildScene2に移動開始

[ ChildScene2 ] atSceneInit  		//ChildScene1に来た
manager : [Progression id="index"]  	//managerの参照あり
[ ChildPage2 ] atCastAdded  		//ChildPage2がAddChildされた
manager : [Progression id="index"]  	//managerの参照なし
</pre>
<p>
ChildPage1.atCastAdded()内で参照したmanagerがnullです。<br />
1回目は同じ箇所でちゃんととれています。<br />
また、直前のChildScene1.atSceneInit()内でもとれています。<br />
でも、ChildPage1.atCastAdded()内で参照したmanagerがnullです。
</p>
<p>
他にも以下のテストをしました。
</p>
<ul>
<li>もう一回り繰り返し、1→2→1→2→1→2にすると、2回目と3回目の同様の箇所で同様の現象が起きます。</li>
<li>シーン遷移の順を2→1→2→1にすると、今度は2回目のChildScene2の同様の箇所で同様の現象が起きます。</li>
<li>ChildPage3とかを作って、1→2→3→1→2→3にすると、やはり2回目のChildScene1の同様の箇所で同様の現象が起きます。</li>
</ul>
<p>
ものすごい基本的なレベルなので、きっと組み方が誤っていると思われますが、ちっともわからないのでエントリにしてみました。これぞ神待ちサイト。
</p>
<h3>追記</h3>
<p>賢い人その①<a href="http://twitter.com/soundkitchen">@soundkitchenさん</a>が教えてくれました。バグだそうで、同じ現象に出会ったそうです。</p>
<p>賢い人その②（というか本家）<a href="http://twitter.com/nium">@niumさん</a>が教えてくれました。次のリリースではなおるそうです。やったね <img src='http://ikekou.jp/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/264/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>URLOpenerとりあえずまとまりました</title>
		<link>http://ikekou.jp/blog/archives/222</link>
		<comments>http://ikekou.jp/blog/archives/222#comments</comments>
		<pubDate>Sun, 22 Nov 2009 12:45:11 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=222</guid>
		<description><![CDATA[先日公開してみたURLOpener、ブラウザの挙動のあまりの違いに落としどころがわからなくなっていましたがまとまりました。
当初はJSでwindow.openを呼んだ時の動きに合わせる！と思っていましたが、別にそんな必要 [...]]]></description>
			<content:encoded><![CDATA[<p>先日公開してみたURLOpener、ブラウザの挙動のあまりの違いに落としどころがわからなくなっていましたがまとまりました。</p>
<p>当初はJSでwindow.openを呼んだ時の動きに合わせる！と思っていましたが、別にそんな必要ないなと。<br />
使う側になってみて考えて、とりあえずよく使う機能を楽に使えればいいや、と切り替えました。</p>
<h3>ダウンロード</h3>
<p>SparkProjectに初コミットしてみましたので、Sparkのリポジトリからエクスポートして下さい。<br />
<a href="http://www.libspark.org/wiki/ikekou/URLOpener">http://www.libspark.org/wiki/ikekou/URLOpener</a></p>
<p>またはzip<br />
<a href="http://ikekou.jp/blog/wp-content/uploads/2009/11/URLOpener.zip">http://ikekou.jp/blog/wp-content/uploads/2009/11/URLOpener.zip</a></p>
<h3>よくやること</h3>
<p>僕が考えるよくやることを列挙すると、せいぜいこんなもの。</p>
<ul>
<li>target=_selfで開く</li>
<li>target=_blankで開く</li>
<li>target=_blank、サイズ指定で開く</li>
<li>target=_blank、サイズ、位置指定で開く</li>
<li>target=_blank、サイズ指定、位置は画面中央で開く</li>
<li>target=_blank、フルスクリーンで開く</li>
<li>alertでデバッグ</li>
</ul>
<p>これらを楽にするということと、Safariでサイズ指定ある場合は先日発見した（つもりでいる）Safariでブロックを回避する方法を使って開くということ、その２点を目標としました。</p>
<h3>できること</h3>
<ul>
<li>window.openよりnavigateToURLのほうが実感としてレスポンスがいいので、オプション指定ない場合はnavigateToURL、オプション指定ある場合はwindow.openと呼び分け</li>
<li>今まであんまりできてなかったと思われる、ポップアップブロックON状態のSafariでの、Flashからのサイズ指定ポップアップを行う</li>
</ul>
<h3>できないこと</h3>
<ul>
<li>もともとJSでできないことができるわけではない</li>
<li>ブラウザによってはスクロールバーやらアドレスバーをオフと指定しても勝手に出る。それはどうしようもない</li>
<li>Operaはブロック設定が何段階かあるが、JavascriptではブロックされないがFlashからだとブロックされる設定がある。その設定でFlashから開けるようにしたかったが、できなかった。</li>
</ul>
<h3>使い方</h3>
<p>使い方はこんなかんじです。</p>
<pre class="brush: as3">
import jp.ikekou.net.urlopener.URLOpener;
import jp.ikekou.net.urlopener.URLOpenerFeatures;
import jp.ikekou.net.urlopener.URLOpenerTarget;

//引数は以下の３つ
//1
//開くURL
//2
//Target window name、一応定数用意しましたが、普通に"_blank"とか"hogeWindow"とかでOK
//3
//window.openの第三引数と同じ。よく使うセットとして
//URLOpenerFeatures.FULLSCREEN    メニューバーとか全部オフにしてフルスクリーン
//URLOpenerFeatures.DIALOG(width, height [, left, top])    メニューバーとか全部オフにしてサイズ指定の小窓、位置指定省略すると中央表示

//target=_self
URLOpener.open(url);

//target=_blank
URLOpener.open(url,URLOpenerTarget.BLANK);

//target=_blank、サイズ指定、位置指定省略すると中央
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.DIALOG(800,600));

//target=_blank、サイズ指定、位置指定nullにしても中央
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.DIALOG(800,600,null,100));

//target=_blank、サイズ指定、位置指定
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.DIALOG(800,600,100,100));

//target=_blank、フルスクリーン
URLOpener.open(url,URLOpenerTarget.BLANK,URLOpenerFeatures.FULLSCREEN);

//target=_blank、Featuresを自分で指定
URLOpener.open(url,URLOpenerTarget.BLANK,"width=800,height=600");

//alert出す
URLOpener.alert("hoge");

//alert出してるけど一時的にオフにして試したい
URLOpener.debugMode = false;
URLOpener.alert("fuga");
</pre>
<h3>今後の予定</h3>
<ul>
<li>windowモード（transparentとか）によって挙動が変わるらしいので、調べる。もしかしたら全然いらんことしてるかもしれない。</li>
<li>console.log等のコンソールに出す関数を、クロスブラウザに一個の関数で出したい</li>
<li>URLOpenerFeatures.DIALOGを使ったときに色々オフする記述を入れているが、それで十分なのか、もっといい記述はないのか、見直す</li>
<li>バージョン表記ってどこにいれたらいいんだろうか！</li>
<li>優れたライブラリを優れたものとしているのは、ステキなドキュメントの力が大きい。ステキなドキュメント作ろう。どうせちっこいちっこいライブラリだし、そんくらいできるはず。 </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/222/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FlashCS4でドキュメントクラスがエラーも出さずに動かなくなる現象に出会いました</title>
		<link>http://ikekou.jp/blog/archives/191</link>
		<comments>http://ikekou.jp/blog/archives/191#comments</comments>
		<pubDate>Mon, 09 Nov 2009 16:18:49 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=191</guid>
		<description><![CDATA[本日仕事中に出会った現象です。
原因は自分のケアレスミスだったのですが、普通なら間違った記述ならそれなりのエラーが出るので問題箇所に気づくものの、今回はエラーも出ないので問題の記述に気づきづらかったので、書き残すことにし [...]]]></description>
			<content:encoded><![CDATA[<p>本日仕事中に出会った現象です。<br />
<em>原因は自分のケアレスミスだった</em>のですが、普通なら間違った記述ならそれなりのエラーが出るので問題箇所に気づくものの、<em>今回はエラーも出ないので問題の記述に気づきづらかった</em>ので、書き残すことにしました。</p>
<h3>環境</h3 >
<ul>
<li>WinXP &#038; FlashCS4 &#038; FlashDevelop3.0.3RTM</li>
<li>DocumentClassで開発</li>
<li>AS3</li>
</ul>
<p>（とはいえ他の環境でテストしてないのでCS3ならどうか、等はわかりません）</p>
<h3>現象</h3>
<ul>
<li>直前まで普通に開発をしていた</li>
<li>traceもいっぱい出してた</li>
<li>何かを書いてパブリッシュしたら突然trace一切出ず、動きも一切なく、クラスを読んでないような雰囲気</li>
<li>ためしにコンストラクタにtraceを入れてもtrace出ず</li>
<li>Flashのデバッガ（Shift+Ctrl+Enterのやつね）を起動してみようとすると、「このSWFにはActionScriptが含まれていないためデバッグできません」と言われる</li>
<li>ドキュメントクラス記入欄の右にある鉛筆マークを押すとちゃんと該当のファイルが開くためパスやファイル名が間違っていることはない</li>
</ul>
<p>と、よくわかんないことだらけなので、最初は<em>flaファイルがぶっ壊れたのか</em>、と思いDropBoxの履歴からちょっと前のファイルを取り出して試したりしました。が、やはり動かず。<em>問題はどうやらflaファイルにはない</em>ようでした。</p>
<h3>解決</h3>
<p>そんなこんなで色々してたら解決しました。<em>問題はクラスファイルのほうにありました</em>。以下解決編。</p>
<p>これは動くクラスファイル↓</p>
<pre class="brush: as3">
package
{
	import flash.display.MovieClip;

	public class Main extends MovieClip
	{
		public function Main()
		{
			var hoge:Number = 0.5;
			trace(hoge);
		}
	}
}
</pre>
<p>これは今回の現象を再現した動かないクラスファイル↓</p>
<pre class="brush: as3">
package
{
	import flash.display.MovieClip;

	public class Main extends MovieClip
	{
		public function Main()
		{
			var hoge:Number = 0..5;
			trace(hoge);
		}
	}
}
</pre>
<p>このサンプルなら一目瞭然ですね。<br />
そう、<em>小数点が2個ついてます。</em><br />
馬鹿ですね。</p>
<p>馬鹿でしょうもないミスとはいえ、エラーも出ないので原因がすぐには思い当たりづらく、traceもでないからエラー箇所の絞込みもできず、そもそもデバッグ起動すらできなくなるので、これが<em>長いソースだとなかなか気づきづらいものです。</em>（と、言い訳させてください）</p>
<p><em>「..」を使うのはまずXMLの時</em>ですよね。あとはよく知りません。<br />
なので、わかる人からしたらこの現象は当たり前なのかもしれませんが、僕としては<em>エラーくらい出て欲しい</em>ものです。</p>
<p>みなさんも、もし同様の現象に出会ったら、小数点が2個ないか、探してみてください！</p>
<p>原因がわからずにうんうんうなりながらtwitterで「困ったよ」って言ったら色々助言してくれた皆様。いつもながらありがとうございました！</p>
<h3>おまけ</h3>
<p>ただ単にその箇所のエラーが出ないだけでなく、そもそもクラスと認識してないので、ほかのエラーも出ません。たとえば</p>
<pre class="brush: as3">
package
{
	import flash.display.MovieClip;

	public class Main extends MovieClip
	{

		piyopiyo

		public function Main()
		{
			fugafuga

			var hoge:Number = 0..5;
			trace(hoge);
		}
	}
}
</pre>
<p>のように、普段なら明らかにエラーが出る余計な文字列が入っていても、エラーが出ません。。。<br />
packageより上に何か書くと、エラー出ました。</p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/191/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SafariでもFlashからサイズ指定の新規ウィンドウをポップアップさせる</title>
		<link>http://ikekou.jp/blog/archives/150</link>
		<comments>http://ikekou.jp/blog/archives/150#comments</comments>
		<pubDate>Sun, 25 Oct 2009 17:45:44 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=150</guid>
		<description><![CDATA[前回の記事「Flash、JavaScriptから新規ウィンドウをポップアップする際のブラウザ毎の挙動のまとめ」の続き。
Safariで、Flashから新規ウィンドウを開こうとしてwindow.openを使うとブロックされ [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://ikekou.jp/blog/archives/67">前回の記事「Flash、JavaScriptから新規ウィンドウをポップアップする際のブラウザ毎の挙動のまとめ」</a>の続き。</p>
<p>Safariで、Flashから新規ウィンドウを開こうとしてwindow.openを使うとブロックされる。<br />
サイズ指定等なしの普通の新規ウィンドウならnavigateToURL(url,&#8221;_blank&#8221;)を使えばいいけど、サイズ指定したい場合はどうしたらいいのか、という件です。</p>
<h3>ネット上の情報を調査</h3>
<p>前回もさらっと探しても見つからなかったのですが、まずはあらためて検索してみます。<br />
グーグルで「flash ポップアップ safari」で検索。</p>
<p><a href="http://endlessblank.com/blog/2009/06/popupfromflash.html">FLASH (AS3.0)からポップアップ</a><br />
<a href="http://megad.heteml.jp/asstudy/2009/08/safari.html">Safariでのポップアップウィンドウ対策</a><br />
<a href="http://feb19.jp/blog/archives/000172.php">AS3でポップアップウィンドウ（2009／春）</a><br />
あと<a href="http://twitter.com/_sakotsu">@_sakotsu</a>さんに教えてもらった<a href="http://www.chaoslave.com/weblog/2008/12/13/urlnavigator-as/">Popups Blocked in AS3 with navigateToURL()</a><br />
とかを読みましたが、解決策は出てきませんでしたので、自分で作りました。</p>
<h3>使い方</h3>
<p>使い方は</p>
<pre class="brush :as3">
//importしてもらって
import jp.ikekou.net.urlopener.URLOpener;

//urlのみ指定
URLOpener.open('http://google.com');
//url、target指定
URLOpener.open('http://google.com', '_blank');
//url、target、option指定
URLOpener.open('http://google.com', '_blank', 'width=200, height=200');
</pre>
<p>みたいなかんじです。これで<em>Safariでもサイズ指定のポップアップができます</em>。<br />
optionはJavaScriptのwindow.openに渡すオプションと同じ形式の文字列です。</p>
<p>他にも、自分が使うからつけた機能で</p>
<pre class="brush :as3">
//Safariか？
URLOpener.isSafari; //return Boolean
//JavaScriptでalert出す
URLOpener.alert("xxx");
</pre>
<p>とかあります。おまけです。</p>
<p>実際の動作は、目指したのはHTMLのリンククリックでwindow.openを呼んだ時の各ブラウザの挙動と同じになるようにしてます。それについては<a href="http://ikekou.jp/blog/archives/67">前回の記事</a>参照。<br />
またnavigateToURLでいい場合は極力navigateToURLを使うこと（レスポンスが早いので）にしてます。</p>
<p>中で何してるかというと、こんなかんじです。<br />
ExternalInterfaceからwindow.open呼んだら開かない。これはきっとユーザーアクションじゃないみたいな感じなんだ（と推測）。なのでこうしました。</p>
<pre class="brush: jscript">
function()
{
	//ダミーの要素作成しイベントハンドラ設置、内部にwindow.openを記述
	var E = document.createElement("div");
	E.onclick = function()
	{
		window.open(url,　target, options);
	};
	//クリックイベント送出
	var evt = document.createEvent("MouseEvents");
	evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
	E.dispatchEvent(evt);
}
</pre>
<p>これをExternalInterfaceで呼んでいます。<br />
これで、SafariのポップアップブロックがONの場合でも、ポップアップします。</p>
<p>こんなやりかたどうなの？という気もしますが、自分の中ではひとつの問題が解決したので、公開します。JavaScriptの書き方こうしたほうがいいよ、という指摘はあったらお願いします。<br />
イベント関係はIEとか違いそうですが、Safariの時のみ呼ぶ前提なのでこれで。</p>
<p>まだブラウザ毎の挙動の吸収とかテストが完全ではないかもしれませんが、今回のクラスのコアは<em>Safariでサイズ指定のウインドウ開けたよーうれしいなー</em>、ってとこなので。コメントもちゃんと入ってないです。<br />
残りはぼちぼち完璧にしていきます。挙動おかしかったら教えてください。現状でも一応大丈夫だと思いますが。</p>
<p>実験用ページを作りました。　→　<a href="http://ikekou.jp/samples/popuptest/">実験用ページはこちら。</a></p>
<p>Safariは「ポップアップウィンドウを開かない」にチェックを入れて試してもらわないと違いがわかりづらいかと思います。<br />
このページを各ブラウザで開いてみて、試した結果がこちら（相変わらずIE7,8がないですがあとで足す予定です・・・）</p>
<style type="text/css"> 
table.c091026{
width:100%;
border-collapse:collapse;
background:#e6e6e6;
}
table.c091026 th, table.c091026 td{
font-size:0.8em;
}
table.c091026 td, table.c091026 th{
padding:10px 5px;
}
table.c091026 th.th_3,
table.c091026 th.th_4,
table.c091026 th.th_5,
table.c091026 th.th_6{
width:100px;
}
</style>
<p><script type="text/javascript"> 
jQuery(function(){
$("table.c091026 tr:even").css("background","#cccccc");
});
</script></p>
<table class="c091026">
<tr>
<td class="th_1"></td>
<td class="th_2"></td>
<td class="th_3">IE6</td>
<td class="th_4">FF</td>
<td class="th_5">Chrome</td>
<td class="th_6">Safari</td>
<td class="th_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;);</td>
<td class="td_3">新規ウィンドウ</td>
<td class="td_4">新規タブ</td>
<td class="td_5">新規タブ</td>
<td class="td_6">新規ウィンドウ</td>
<td class="td_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;, &#8221;);</td>
<td class="td_3">新規ウィンドウ</td>
<td class="td_4">新規タブ</td>
<td class="td_5">新規タブ</td>
<td class="td_6">新規ウィンドウ</td>
<td class="td_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;, null);</td>
<td class="td_3">新規ウィンドウ</td>
<td class="td_4">新規タブ</td>
<td class="td_5">新規タブ</td>
<td class="td_6">新規ウィンドウ</td>
<td class="td_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;, &#8216;_self&#8217;);</td>
<td class="td_3">自ウィンドウ</td>
<td class="td_4">自タブ</td>
<td class="td_5">自タブ</td>
<td class="td_6">自ウィンドウ</td>
<td class="td_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;);</td>
<td class="td_3">新規ウィンドウ</td>
<td class="td_4">新規タブ</td>
<td class="td_5">新規タブ</td>
<td class="td_6">新規ウィンドウ</td>
<td class="td_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;, &#8221;);</td>
<td class="td_3">新規ウィンドウ</td>
<td class="td_4">新規タブ</td>
<td class="td_5">新規タブ</td>
<td class="td_6">新規ウィンドウ</td>
<td class="td_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;, null);</td>
<td class="td_3">新規ウィンドウ（optionオフ）</td>
<td class="td_4">新規ウィンドウ（optionオフ）</td>
<td class="td_5">新規タブ</td>
<td class="td_6">新規ウィンドウ</td>
<td class="td_7">
<tr>
<td class="td_1"></td>
<td class="td_2">URLNavigator.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;, &#8216;width=200, height=200&#8242;);</td>
<td class="td_3">新規ウィンドウ（option指定）</td>
<td class="td_4">新規ウィンドウ（option指定）</td>
<td class="td_5">新規ウィンドウ（option指定）</td>
<td class="td_6"><em>新規ウィンドウ（option指定）</em></td>
<td class="td_7">
</table>
<p>Safariでも指定サイズポップアップができてるはずです。</p>
<p>ダウンロード→<a href='http://ikekou.jp/blog/wp-content/uploads/2009/10/URLOpener.zip'>URLOpener.zip</a></p>
<h3>結論</h3>
<p><em>Safariでも指定サイズのポップアップ、できたよ！</em></p>
<p>Flashなのに華やかな表現のネタじゃないし、基礎も基礎、実務で出会わないわけのない問題の解決ネタなので、激しく既出だったり、てんでおかしなことを言ってたら恥ずかしいものです。一応調査もしたし、そうでないことを願ってます！</p>
<h3>2009.10.26追記</h3>
<p>twitterで皆様に色々指摘頂いたので、追記・修正していこうと思います。<br />
とりあえず<em>WinでのOpera</em>と、<em>Mac</em>でのテスト一切できてなかったので、そこやらないと、と思ってます。<br />
Mac持ってないけど・・・</p>
<h3>2009.10.31追記</h3>
<p>Operaのポップアップブロック、突破できない予感です。<br />
でもまぁ、Operaの場合は「今ブロックしましたよ」という表示がちゃんと出るし（Safariは出ない）、<br />
ユーザーに認知してもらうことができるという点でSafariほど問題はない、という落としどころにするしかないかな、と考えています。</p>
<h3>2009.11.04追記</h3>
<p>会社のMac版Safariでは開けました。</p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/150/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flash、JavaScriptから新規ウィンドウをポップアップする際のブラウザ毎の挙動のまとめ</title>
		<link>http://ikekou.jp/blog/archives/67</link>
		<comments>http://ikekou.jp/blog/archives/67#comments</comments>
		<pubDate>Sat, 24 Oct 2009 02:56:02 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[Flash]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=67</guid>
		<description><![CDATA[
table.c091025{
width:100%;
border-collapse:collapse;
background:#e6e6e6;
}
table.c091025 th, table.c091025 td [...]]]></description>
			<content:encoded><![CDATA[<style type="text/css">
table.c091025{
width:100%;
border-collapse:collapse;
background:#e6e6e6;
}
table.c091025 th, table.c091025 td{
font-size:0.8em;
}
table.c091025 td, table.c091025 th{
padding:10px 5px;
}
table.c091025 th.th_3,
table.c091025 th.th_4,
table.c091025 th.th_5,
table.c091025 th.th_6{
width:100px;
}
</style>
<p><script type="text/javascript">
jQuery(function(){
$("table.c091025 tr:even").css("background","#cccccc");
});
</script></p>
<p>Flashから他のアドレスに飛んだり、新しい画面を開く方法は主に2つ。</p>
<ul>
<li><em>navigateToURL(url, target);</em></li>
<li><em>ExternalInterface.call(&#8221;window.open&#8221;, url, target, options);</em></li>
</ul>
<p>だと思います。<br />
そしてオプションを指定することはnavigateToURLではできない、と思ってます。<br />
いやもっとあるよ、オプション指定もできるよ、となると記事の前提が崩れますが、調べても出てこなかったので、たぶん主にそんなもんだと思いますし、そういう前提で話を進めます。</p>
<p>試してみると、そもそもHTMLをクリックして<em>JavaScriptのwindow.openを呼んだ場合も含めてブラウザによって挙動が違う</em>ので、表にしました。</p>
<h3>JavaScript</h3>
<p>まずはJavaScript。JavaScriptは本職じゃないので完全に非のない書き方かどうかわかりませんが、とりあえずこういう記述です。</p>
<pre class="brush: jscript">
<a href="javascript:void(0)" onclick='window.open("http://google.com"); return false;'>xxx</a>
</pre>
<p>このonclickに、以下のパターンを入れて試しました。</p>
<pre class="brush: jscript">
window.open('http://google.com');
window.open('http://google.com', '');
window.open('http://google.com', null);
window.open('http://google.com', '_self');
window.open('http://google.com', '_blank');
window.open('http://google.com', '_blank', '');
window.open('http://google.com', '_blank', null);
window.open('http://google.com', '_blank', 'width=200, height=200');
</pre>
<p>引数に空白文字列入れたり、null入れたり、無駄っぽい、重複っぽいこともしてますが、調査なので見逃してください。<br />
実際に押せるリンクはこちら。</p>
<p><a href="javascript:void(0)" onclick="window.open('http://google.com'); return false;">window.open(&#8217;http://google.com&#8217;);</a><br />
<a href="javascript:void(0)" onclick="window.open('http://google.com', ''); return false;">window.open(&#8217;http://google.com&#8217;, &#8221;);</a><br />
<a href="javascript:void(0)" onclick="window.open('http://google.com', null); return false;">window.open(&#8217;http://google.com&#8217;, null);</a><br />
<a href="javascript:void(0)" onclick="window.open('http://google.com', '_self'); return false;">window.open(&#8217;http://google.com&#8217;, &#8216;_self&#8217;);</a><br />
<a href="javascript:void(0)" onclick="window.open('http://google.com', '_blank'); return false;">window.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;);</a><br />
<a href="javascript:void(0)" onclick="window.open('http://google.com', '_blank', ''); return false;">window.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;, &#8221;);</a><br />
<a href="javascript:void(0)" onclick="window.open('http://google.com', '_blank', null); return false;">window.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;, null);</a><br />
<a href="javascript:void(0)" onclick="window.open('http://google.com', '_blank', 'width=200, height=200'); return false;">window.open(&#8217;http://google.com&#8217;, &#8216;_blank&#8217;, &#8216;width=200, height=200&#8242;);</a></p>
<p>いろんなブラウザで押してみました。</p>
<p>以下、表内の表記は</p>
<ul>
<li>新ウ=新規ウィンドウ</li>
<li>新タ=新規タブ</li>
<li>option指定=width等が指定された状態</li>
<li>optionなし=ツールバーやステータスバーに関する指定にoffが渡されたのと同じような状態</li>
</ul>
<p>とします。</p>
<p>この表には<em>IE7、IE8、Opera、がないじゃないか</em>という声もあると思います。<br />
今の環境に入っていないのですが、会社で試した感じではFFに近い挙動です。<br />
また会社ででも実験して追記します。</p>
<p><strong>JavaScriptの結果</strong></p>
<table class="c091025">
<tr>
<th class="th_2">window.open(下の文字列);</th>
<th class="th_3">IE6</th>
<th class="th_4">FF</th>
<th class="th_5">Chrome</th>
<th class="th_6">Safari</th>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6">新ウ</td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8221;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6">新ウ</td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, null</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6">新ウ</td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_self&#8217;</td>
<td class="td_3">自ウ</td>
<td class="td_4">自タ</td>
<td class="td_5">自タ</td>
<td class="td_6">自ウ</td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6">新ウ</td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;, &#8221;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6">新ウ</td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;, null</td>
<td class="td_3"><em>新ウ（optionオフ）</em></td>
<td class="td_4"><em>新ウ（optionオフ）</em></td>
<td class="td_5"><em>新タ</em></td>
<td class="td_6"><em>新ウ</em></td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;, &#8216;width=200, height=200&#8242;</td>
<td class="td_3">新ウ（option指定）</td>
<td class="td_4">新ウ（option指定）</td>
<td class="td_5">新ウ（option指定）</td>
<td class="td_6">新ウ（option指定）</td>
</table>
<p>結果は<em>第3引数にnullを渡したときにブラウザによって違いが出る</em>ようです。<br />
特に<em>IEとFF</em>が、<em>第3引数を省略した時や空白文字列を渡した時とは異なる動作</em>をしました。</p>
<p>optionオフというのは、実際に見てもらうのが早いかと思いますが、optionにmenubar=no等をすべてオフ指定した場合のようなものものが出ます。</p>
<h3>ActionScript : navigateToURL</h3>
<p>次にFlashのnavigateToURLを使用する場合です。<br />
こちらはtarget=&#8221;_blank&#8221;等の指定はできるものの、widthやheight、menubar等の指定はできません。（と思い込んでいますが実はできる？）<br />
よって項目が少し減ります。</p>
<p>記述はこんな感じです。</p>
<pre class="brush: as3">
navigateToURL(new URLRequest('http://google.com'));
navigateToURL(new URLRequest('http://google.com'), '_self');
navigateToURL(new URLRequest('http://google.com'), '_blank');
</pre>
<p><strong>ActionScript : navigateToURLの結果</strong></p>
<table class="c091025">
<tr>
<th class="th_2">navigateToURL(下の文字列);</th>
<th class="th_3">IE6</th>
<th class="th_4">FF</th>
<th class="th_5">Chrome</th>
<th class="th_6">Safari</th>
<tr>
<th class="th_2">new URLRequest(&#8217;http://google.com&#8217;)</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6">新ウ</td>
<tr>
<th class="th_2">new URLRequest(&#8217;http://google.com&#8217;), &#8216;_self&#8217;</td>
<td class="td_3">自ウ</td>
<td class="td_4">自タ</td>
<td class="td_5">自タ</td>
<td class="td_6">自ウ</td>
<tr>
<th class="th_2">new URLRequest(&#8217;http://google.com&#8217;), &#8216;_blank&#8217;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6">新ウ</td>
</table>
<p>まあまあ、そんな感じですね。特に<em>挙動に違いはありません</em>。</p>
<h3>ActionScript : ExternalInterface</h3>
<p>次にExternalInterface経由でwindow.openを呼んだ場合。</p>
<p>記述はこんな感じです。</p>
<pre class="brush: as3">
ExternalInterface.call('window.open', 'http://google.com');
ExternalInterface.call('window.open', 'http://google.com', '');
ExternalInterface.call('window.open', 'http://google.com', null);
ExternalInterface.call('window.open', 'http://google.com', '_self');
ExternalInterface.call('window.open', 'http://google.com', '_blank');
ExternalInterface.call('window.open', 'http://google.com', '_blank', '');
ExternalInterface.call('window.open', 'http://google.com', '_blank', null);
ExternalInterface.call('window.open', 'http://google.com', '_blank', 'width=200, height=200');
</pre>
<p><strong>ActionScript : ExternalInterfaceの結果</strong></p>
<table class="c091025">
<tr>
<th class="th_2">ExternalInterface.call(&#8217;window.open&#8217;, 下の文字列);</th>
<th class="th_3">IE6</th>
<th class="th_4">FF</th>
<th class="th_5">Chrome</th>
<th class="th_6">Safari</th>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ
</td>
<td class="td_6"><em>無視</em></td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8221;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6"><em>無視</em></td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, null</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ
</td>
<td class="td_6"><em>無視</em></td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_self&#8217;</td>
<td class="td_3">自ウ</td>
<td class="td_4">自タ</td>
<td class="td_5">自タ</td>
<td class="td_6">自ウ</td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6"><em>無視</em></td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;, &#8221;</td>
<td class="td_3">新ウ</td>
<td class="td_4">新タ</td>
<td class="td_5">新タ</td>
<td class="td_6"><em>無視</em></td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;, null</td>
<td class="td_3"><em>新ウ（optionオフ）</em></td>
<td class="td_4"><em>新ウ（optionオフ）</em></td>
<td class="td_5"><em>新タ</em></td>
<td class="td_6"><em>無視</em></td>
<tr>
<th class="th_2">&#8216;http://google.com&#8217;, &#8216;_blank&#8217;, &#8216;width=200, height=200&#8242;</td>
<td class="td_3">新ウ（option指定）</td>
<td class="td_4">新ウ（option指定）</td>
<td class="td_5">新ウ（option指定）</td>
<td class="td_6"><em>無視</em></td>
</table>
<p>ここらに来て結果が割れました。</p>
<p>まず、<em>IE、FFは第三引数まわりで、最初に試した、HTMLからJavaScriptを呼んだ場合と同じ動作</em>をします。<br />
ExternalInterfaceでJavaScriptを呼んでるので当たり前と言えば当たり前です。</p>
<h3>Safariの話</h3>
<p>しかし、<em>Safariが、新規ウインドウ系をのきなみブロック</em>します。<br />
これは<em>HTMLからの呼び出しとは挙動が違います</em>。</p>
<p>もちろんこれは<em>ポップアップブロックON</em>の場合です。<br />
OFFにしてもらえばいいじゃん、と言ってしまうと話が終わってしまうのですが<br />
<em>初期ダウンロード時にON</em>であるということと、<br />
IE等のポップアップブロックと違って<em>完全にサイレント、何も画面に変化がなくブロックされてしまう</em>のでブロックされていることにユーザーが気づいてすらくれない、という可能性があるので、やはりON時でもなんとかすることに意味があると考えます。</p>
<p>（完全に推測ですが、SafariではFlashで言うユーザーアクションにひもづかない新規ウィンドウオープンはブロックする仕様で、<br />
かつFlash内からの呼び出しがユーザーアクションにひもづいていると認識してもらえてないのではないでしょうか。）</p>
<h3>そのほか</h3>
<p>調べていて他に気になったことと言えば、</p>
<ul>
<li>HTMLからの呼び出し、Flashからの呼び出しともに、window.openで_selfを指定すると、<em>遷移後の戻るボタンで何故か2回分戻る</em>？気がする。実際ネットにもそういう情報があった気がする。</li>
<li>その現象は<em>navigateToURLでは起きない</em></li>
<li>ExternalInterfaceの<em>window.openは、レスポンスが極端に悪い</em>。特にSafariは、_selfは機能するが一見機能してないのではと思う程に遅れる</li>
</ul>
<p>という点です。</p>
<h3>結論</h3>
<p>これらを考えると、Flashからページ移動、または新規ウィンドウのオープンをする場合</p>
<ul>
<li><em>navigateToURLとwindow.openで結果が同じものはnavigateToURLを使う</em>。理由は以下。
<ul>
<li>window.openよりnavigateToURLのほうがレスポンスが良い</li>
<li>window.openでは先述の戻るボタン問題が起きるブラウザがあるが、navigateToURLではおきない</li>
</ul>
</li>
<li><em>新規ウィンドウに対してオプション指定したい場合はwindow.openを使う</em>。（navigateToURLじゃできないし）</li>
<li><em>Safariで新規ウィンドウに対してオプション指定して開きたい場合、なんとかする</em>。</li>
</ul>
<p>というのが、現状とるべき対応なのかと。</p>
<p>とはいえ、これはいちいち判断するのは面倒。それに<em>Safariでなんとかするって、どうするのか</em>。<br />
たとえば、<em>開かれるほうのウィンドウに記述を入れるとできる</em>らしいです。<br />
でも、開く先が既存ページで、自分ではさわれなかったり、数が多かったりすると面倒だなと感じました。<br />
なんとかできるに越したことはないと。</p>
<p>ネットの情報では<em>基本的にできない</em>、あきらめて<em>navigateToURLで_blankでやる</em>、呼ぶ側ではなく<em>開き先のほうで記述を入れる</em>、等ありましたが、根本的にやる方法は出てきませんでした。</p>
<p>なので、なんとかならないか試してみたいと思います。 </p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/67/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPressのSyntaxHighlighterがActionScriptに対応してました</title>
		<link>http://ikekou.jp/blog/archives/16</link>
		<comments>http://ikekou.jp/blog/archives/16#comments</comments>
		<pubDate>Fri, 23 Oct 2009 10:18:40 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=16</guid>
		<description><![CDATA[コードを貼ることもあるので、やはりきれいに見せたいものです。
みなさんのよく利用していて見かける、SyntaxHighlighterを導入してみました。
目的
今回のゴールは

一般的に普及していてかつ機能的にも充実して [...]]]></description>
			<content:encoded><![CDATA[<p>コードを貼ることもあるので、やはりきれいに見せたいものです。<br />
みなさんのよく利用していて見かける、<em>SyntaxHighlighter</em>を導入してみました。</p>
<h3>目的</h3>
<p>今回のゴールは</p>
<ul>
<li>一般的に普及していてかつ機能的にも充実しているSyntaxHighlighterを導入したい。</li>
<li>WordPressのSyntaxHighlighterプラグインには入力方式が主に２つあり、
<ul>
<li>preタグを使う&lt;pre calss=&#8221;language&#8221;&gt;hogehuga&lt;/pre&gt;</li>
<li>大括弧を使う[language]hogehuga[/language]で、自動で変換してくれる</li>
</ul>
<p>と主に二つあるようだが、前者のpreタグ方式のものを導入したい。</li>
<li>ActionScriptもカラーリングしたい。</li>
</ul>
<p>とします。</p>
<h3>調査</h3>
<p>とりあえずググって調べて見てみると、現状は以下のようなものでした。</p>
<ul>
<li>プラグインは色々あるが、もととなるのはJSのライブラリである<br />
<a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter">SyntaxHighlighter</a>であり、各プラグインではJSでの処理に至るまでの過程が異なるのみである。実際にはヘッダでJSを読み込み、初期化関数を呼べばいいだけなので、最も単純な方法としては自分でheader.phpに書いても簡単にできる。</li>
<li>また、ネットでの情報ではSyntaxHighlighterはASに対応していないとある過去記事が多いが、実際にはバージョンアップしてAS他、対応言語が増えている。</li>
<li>しかし、そのバージョンアップにプラグインが対応できているかというと、必ずしもそうではない。古いバージョンを載せていてASに対応していないものもある。</li>
<li>大元のサイトによると、最新バージョンではpreタグの他にも&lt;script type=&#8221;syntaxhighlighter&#8221;&gt;でも使えるよう。</li>
</ul>
<p>以上の結果から、まずは最新バージョンを取り込んでくれていて、かつpreタグ方式のもの、を探します。</p>
<p>管理画面のプラグイン新規追加で「syntax highlighter」で検索をかけ、順に見ていくことにしました。<br />
インストール前にまずはダウンロードしてみて中身を見て判断します。</p>
<p><a href="http://wordpress.org/extend/plugins/google-syntax-highlighter">Google Syntax Highlighter for WordPress</a><br />
SyntaxHighlighterのバージョンが古く、AS未対応でした。また原因はよくわかりませんが、上手く動かない時があります。過去に動かなかったことがあり、今回も実際インストールしてみても動かなかったです。</p>
<p><a href="http://osexpert.net/wordpress-syntax-highlighter">Dojox Wordpress Syntax Highlighter</a><br />
説明ページがリンク切れだったので、却下。</p>
<p><a href="http://www.lastengine.com/syntax-highlighter-wordpress-plugin">Syntax Highlighter and Code Colorizer for Wordpress</a><br />
こちらもSyntaxHighlighterのバージョンが古かったので、却下。</p>
<p><a href="http://blog.burlock.org/easy-google-syntax-highlighter/">Easy Google Syntax Highlighter</a><br />
これはバージョン番号を見ると2.1.364とあり、最新のSyntaxHighlighterを取り込んでいます。入力方式もpreタグです。<br />
そしてプラグインのphpが他に比べて異様に長いな、と思っていたら、管理画面に「どの言語ファイルを読み込むか」「どのテーマを選ぶか」等の設定をできる画面が出てきます。<br />
これはいい。<br />
本体JSがバージョンアップした時に自分でマージするとしたら少々面倒そうですが、機能的にはここまでで間違いなく一番良いです。<br />
条件を満たすものが見つかったので調査終了。</p>
<h3>インストール</h3>
<p>条件を満たしているので<em>Easy Google Syntax Highlighterをインストール</em>。プラグインを有効化。<br />
確認した所、<em>無事に表示されました</em>。めでたしめでたし。</p>
<h3>自分でできないか？</h3>
<p>ここまでで目的は一応完了しました。<br />
しかし、もとのライブラリのバージョンアップにプラグインのバージョンアップがついていかなかった場合、自分でしなくてはいけないですし、<br />
ごく単純な形のプラグイン作成の勉強のためにも自分でできないか、試してみました。</p>
<p>実際にしなくてはならないことは少なく、元々のライブラリをダウンロードしたらついているサンプルのhtmlを見るとわかりますが必要なのはこれだけなはず。<br />
（ちなみに何故か、実際にはshBrushAS.js等がフォルダに用意されているにも関わらずサンプルには読み込まれていないので、追加しました）</p>
<pre class="brush: php;">&lt;script type="text/javascript" src="scripts/shCore.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushAS3.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushBash.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushColdFusion.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushCpp.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushCSharp.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushCss.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushDelphi.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushDiff.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushErlang.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushGroovy.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushJava.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushJavaFX.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushJScript.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushPerl.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushPhp.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushPlain.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushPowerShell.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushPython.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushRuby.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushScala.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushSql.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushVb.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="scripts/shBrushXml.js"&gt;&lt;/script&gt;
&lt;link type="text/css" rel="stylesheet" href="styles/shCore.css"/&gt;
&lt;link type="text/css" rel="stylesheet" href="styles/shThemeDefault.css"/&gt;
&lt;script type="text/javascript"&gt;
    SyntaxHighlighter.config.clipboardSwf = 'scripts/clipboard.swf';
    SyntaxHighlighter.all();
&lt;/script&gt;</pre>
<p>要はshCore.jsをまず読み込み、その後必要な分の言語ファイルを読み込み、swfファイルの位置を指定、all()で初期化する、それだけです。</p>
<p>元々のJSライブラリをダウンロードしてきても、それ自体はWPともMTとも無関係なので、WPのプラグイン用のPHPファイルはありません。<br />
逆に言うと、それを入れてあげるだけで、プラグインとして機能するようになり、管理画面にも出ます。<br />
サンプルのhtmlと、既存のプラグインのPHPを参考に出来上がったのはこちら。PHPファイルをzipにしてます。</p>
<p><a href="http://ikekou.jp/blog/wp-content/uploads/2009/10/my_syntax_highlighter.zip">my_syntax_highlighter.zip</a></p>
<pre class="brush: php;">&lt;?php
/**
 * @package My_Syntax_Highlighter
 * @author ikekou
 * @version 1.0
 */
/*
Plugin Name: My Syntax Highlighter
Plugin URI: http://wordpress.org/#
Description: &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;Syntax Highlighter&lt;/a&gt;の2.1.364です。
Author: ikekou
Version: 1.0
Author URI: http://ikekou.jp
*/

function insert_header() {
    $current_path = get_option('siteurl') .'/wp-content/plugins/' . basename(dirname(__FILE__)) .'/';
    ?&gt;
    &lt;link href="&lt;?php echo $current_path; ?&gt;styles/shCore.css" type="text/css" rel="stylesheet" /&gt;
    &lt;link href="&lt;?php echo $current_path; ?&gt;styles/shThemeDefault.css" type="text/css" rel="stylesheet" /&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shCore.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushAS3.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushBash.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushColdFusion.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushCpp.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushCSharp.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushCss.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushDelphi.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushDiff.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushErlang.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushGroovy.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushJava.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushJavaFX.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushJScript.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushPerl.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushPhp.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushPlain.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushPowerShell.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushPython.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushRuby.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushScala.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushSql.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushVb.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript" src="&lt;?php echo $current_path; ?&gt;scripts/shBrushXml.js"&gt;&lt;/script&gt;
    &lt;script type="text/javascript"&gt;
        SyntaxHighlighter.config.clipboardSwf = '&lt;?php echo $current_path; ?&gt;scripts/clipboard.swf';
        SyntaxHighlighter.all();
    &lt;/script&gt;
    &lt;?php
}
add_action('wp_head','insert_header');

?&gt;</pre>
<p>最初の部分に書いてあるコメントがどうやらプラグインとして必要なもののようで、Hello DollyプラグインのPHPファイルからコピーしました。<br />
このPHPファイルのファイル名は何でも良く、管理画面に出てくる名前は<br />
Plugin Name: My Syntax Highlighter<br />
の値のようです。ほかの項目も今回は適当です。</p>
<p>全部の言語は使わないので、実際には使いそうなものだけ残しています。</p>
<p>これを使ってSyntaxHighlighterを使うための手順をあらためて説明すると、 </p>
<ol>
<li>まず大本のJSを配布している<a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter">http://alexgorbatchev.com/wiki/SyntaxHighlighter</a>からJSをダウンロード</li>
<li>解凍したらフォルダ名が他のプラグインと名前が重複しないように適当にリネーム</li>
<li>上記のPHPファイルをそのフォルダ内に作成。utf8、bomなしで。<br />
フォルダごと/wp-content/plugins/にアップ。</li>
<li>管理画面にMy Syntax Highlighterが追加されるので、[使用する]をクリック。<br />
&lt;pre class=&#8221;brush: php;&gt;hogehoge&lt;/php&gt;みたいな感じで投稿。</li>
<li>確認</li>
</ol>
<p>という流れです。</p>
<h3>結論</h3>
<p>自分でできたのは勉強になったのでよかったです。プラグインが機能する基本的な仕組みは理解できました。<br />
管理画面とからんでくる部分はわかりませんが。</p>
<p>しかしとりあえず、困るまでは<em>Easy Google Syntax Highlighterを使ってみます</em>。<br />
便利そうですしね！</p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/16/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress引越しのためDBはダンプしたけど後回しで急遽復活しました。</title>
		<link>http://ikekou.jp/blog/archives/61</link>
		<comments>http://ikekou.jp/blog/archives/61#comments</comments>
		<pubDate>Wed, 21 Oct 2009 08:06:07 +0000</pubDate>
		<dc:creator>ikekou</dc:creator>
				<category><![CDATA[Others]]></category>

		<guid isPermaLink="false">http://ikekou.jp/blog/?p=61</guid>
		<description><![CDATA[気に入っていない道具は使用頻度も下るもの。
以前のblogは内容も見た目も更新の使い勝手も全体的にイマイチだったので、イチから自分で作ろうと一度closeしました。
ところが、やっぱりその間にも書きたいことなどありまして [...]]]></description>
			<content:encoded><![CDATA[<p>気に入っていない道具は使用頻度も下るもの。<br />
以前のblogは内容も見た目も更新の使い勝手も全体的にイマイチだったので、イチから自分で作ろうと一度closeしました。</p>
<p>ところが、やっぱりその間にも書きたいことなどありまして。<br />
とりあえずSImpleなテーマ（その名も<em>&#8220;Simpla&#8221;</em>）で急遽復活。</p>
<p>おまけにいずれ入れようと思ってとってあるDBのダンプデータは、なんかちょっと上手く行かずまた今度。<br />
どうせ大した内容じゃないから優先順位低い。</p>
<p>全く違うテーマは一緒にするとなんかダメと前回学んだので、別のブログでやろうかなと思い、逆ドメイン（ぽく）名前をつけてみたので、次は<em>jp.ikekou.blog.Ramen</em>か何かでしょう。と予想。</p>
<p>ということでまたよろしくお願いいたします。</p>
]]></content:encoded>
			<wfw:commentRss>http://ikekou.jp/blog/archives/61/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
