<?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>アストロデオブログ &#187; JavaScript</title>
	<atom:link href="http://astrodeo.com/blog/archives/category/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://astrodeo.com/blog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 28 Jul 2010 01:18:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>javascriptのreturn false</title>
		<link>http://astrodeo.com/blog/archives/632</link>
		<comments>http://astrodeo.com/blog/archives/632#comments</comments>
		<pubDate>Mon, 31 May 2010 05:12:48 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/?p=632</guid>
		<description><![CDATA[HTMLでaタグにjavascriptのonclick属性なんかをつけたいときは、まあこんな書き方になると思う。


test


このとき、return falseをつけておかないと、リンクをクリックしてアラートが出た後に、アンカーの移動（で合ってる？）みたいなのが行われてしまう。URLの最後に＃がつく感じですね。
ここを＃にしないでjavascript:void(0)と書くと、return falseがなくても大丈夫なのかな……自分で確かめた限りでは大丈夫だったけど、参考文献をいくつかあさった限りでは、javascript:void(0)でも完全なリンクの無効にはならないっぽいことも書いてあった。まあどっちの場合でもreturn falseを書いとけばまず間違いはないだろうと思われます。
僕も基本的には常にreturn falseを書いてます。まあ僕の場合は、return falseの意味をちゃんと理解してたわけじゃなくて、初めてjavascriptを触ったときに、とりあえず後ろにはreturn falseをつけるのが常識なんだろうみたいな印象を持って以降、今でもそのままの流れでとりあえずつけとけばいいやって思って書いてる感じですけど。
でもそんな覚え方だと、やっぱり落とし穴の一つや二つにははまるわけですね。
この前、ラジオボタンにonchange属性をつける仕様があったんですけど、当然のようにreturn falseをつけて書いてたら、チェックの変更が起きなくなってしまったんですね。







だいぶ適当に書きましたけど、例えばこんな感じのラジオボタンがあったとして、最初にラジオ１の方を選択してそっちにチェックがついたら、何度ラジオ２の方のボタンを押してもチェックはラジオ１の方についたままになってたんですよ。何か言葉だけで説明するとややこしいっすかね……すんません。
ちなみに、function test()はちゃんと呼ばれます。だからthis.valueをアラートしてみると、ちゃんと選択された方の値は取得できるんですよ。でもチェックの移動はしない。function内で無理やりチェックを変えるとかも試みてみたんですけど、ダメでした。僕の書き方に問題があった可能性はここでは無視することにして、とりあえずダメでした。しつこいようですが、ダメでした。
ダメでした。
で、その原因がreturn falseでした。こいつを外したら、正常な動きをするようになった。
何かねぇ……ラジオボタンにonchangeって、なかなかの曲者っぽい感じがします。Firefoxではちゃんと動くのにIEだとちゃんと動かなかったりとか。っていうか、IE6だとちゃんと動かなかったりとか。
この前もね、先方さんから「何かラジオボタンのとこが上手く動かないんだけど」みたいなこと言われて、こっちでいろいろチェックしてみたんですけど、どこにも不具合が見つからなくて、まさかと思ってIE6でテストしてみたら、まさにズバリだったさ。
くそっ、IE6め。IE6めぇぇぇぇ！！
]]></description>
			<content:encoded><![CDATA[<p>HTMLでaタグにjavascriptのonclick属性なんかをつけたいときは、まあこんな書き方になると思う。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

<a href="#" onclick="alert('test');return false">test</a>

</textarea>
<p>このとき、return falseをつけておかないと、リンクをクリックしてアラートが出た後に、アンカーの移動（で合ってる？）みたいなのが行われてしまう。URLの最後に＃がつく感じですね。</p>
<p>ここを＃にしないでjavascript:void(0)と書くと、return falseがなくても大丈夫なのかな……自分で確かめた限りでは大丈夫だったけど、参考文献をいくつかあさった限りでは、javascript:void(0)でも完全なリンクの無効にはならないっぽいことも書いてあった。まあどっちの場合でもreturn falseを書いとけばまず間違いはないだろうと思われます。</p>
<p>僕も基本的には常にreturn falseを書いてます。まあ僕の場合は、return falseの意味をちゃんと理解してたわけじゃなくて、初めてjavascriptを触ったときに、とりあえず後ろにはreturn falseをつけるのが常識なんだろうみたいな印象を持って以降、今でもそのままの流れでとりあえずつけとけばいいやって思って書いてる感じですけど。</p>
<p>でもそんな覚え方だと、やっぱり落とし穴の一つや二つにははまるわけですね。</p>
<p>この前、ラジオボタンにonchange属性をつける仕様があったんですけど、当然のようにreturn falseをつけて書いてたら、チェックの変更が起きなくなってしまったんですね。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

<input type="radio" id="radio1" name="radio" value="ラジオ１" onchange="test(this.value);return false" />

<input type="radio" id="radio2" name="radio" value="ラジオ２" onchange="test(this.value);return false" />

</textarea>
<p>だいぶ適当に書きましたけど、例えばこんな感じのラジオボタンがあったとして、最初にラジオ１の方を選択してそっちにチェックがついたら、何度ラジオ２の方のボタンを押してもチェックはラジオ１の方についたままになってたんですよ。何か言葉だけで説明するとややこしいっすかね……すんません。</p>
<p>ちなみに、function test()はちゃんと呼ばれます。だからthis.valueをアラートしてみると、ちゃんと選択された方の値は取得できるんですよ。でもチェックの移動はしない。function内で無理やりチェックを変えるとかも試みてみたんですけど、ダメでした。僕の書き方に問題があった可能性はここでは無視することにして、とりあえずダメでした。しつこいようですが、ダメでした。</p>
<p>ダメでした。</p>
<p>で、その原因がreturn falseでした。こいつを外したら、正常な動きをするようになった。</p>
<p>何かねぇ……ラジオボタンにonchangeって、なかなかの曲者っぽい感じがします。Firefoxではちゃんと動くのにIEだとちゃんと動かなかったりとか。っていうか、IE6だとちゃんと動かなかったりとか。</p>
<p>この前もね、先方さんから「何かラジオボタンのとこが上手く動かないんだけど」みたいなこと言われて、こっちでいろいろチェックしてみたんですけど、どこにも不具合が見つからなくて、まさかと思ってIE6でテストしてみたら、まさにズバリだったさ。</p>
<p>くそっ、IE6め。IE6めぇぇぇぇ！！</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/632/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>submit is a not function って言われた</title>
		<link>http://astrodeo.com/blog/archives/508</link>
		<comments>http://astrodeo.com/blog/archives/508#comments</comments>
		<pubDate>Mon, 19 Apr 2010 00:20:07 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/?p=508</guid>
		<description><![CDATA[javascriptでフォームのデータを送信する場合はsubmit()を使う。


document.getElementById('form_id').submit();


先日、Ajaxで処理を行う場面に出くわしたときにこのsubmit()を使ったのだけど、とあるページでだけエラーが起きた。


$('form_id').submit is not a function


こんな感じのエラー。あ、document.get～が$になってるのはprototype.jsを使用してるからね。
いくつかのページで同様の処理を行っていたのだけど、一つのページでだけこのエラーが出て、どうにも先に進まなかった。
で、調べた結果たどり着いたのがこちら
＞どうやらidやname属性が &#8220;submit&#8221; になってる部品があると、JavaScriptのFormオブジェクトのsubmit()が上書きされる模様。 
ということなんだそうです。
ああ、言われてみれば確かに。CakePHPでsubmitボタンの種類別の判定をしようとして、$this-&#62;params['form']['submit']に値を入れるために、submitボタンにsubmitっていうname属性をつけていました。


&#60;input type="submit" name="submit" value="送信" /&#62;

//データ送信時の値
$this-&#62;params['form']['submit] =&#62; 送信


確認画面を挟んだ処理とかのときにね、この値をswitch文とかで判定しようと思ってやったことだったんだけど、まさかそれがこんなところに影響を及ぼすとは、思いもよりませんでした。まあ、分かってしまえば解決方法は至って簡単。name属性を別のに変えれば良い。


&#60;input type="submit" name="send" value="送信" /&#62;

//データ送信時
$this-&#62;params['form']['send'] =&#62; 送信


上記の参考サイトさんには、これは当たり前すぎる的なことを書いてあるんですが……そーだったんですか。
でもそういう当たり前のことに気づかないことだって、たまにはあるよね。人間だもの。
（僕の場合は気づかなかったんじゃなくて知らなかっただけですけど……）
]]></description>
			<content:encoded><![CDATA[<p>javascriptでフォームのデータを送信する場合はsubmit()を使う。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

document.getElementById('form_id').submit();

</textarea>
<p>先日、Ajaxで処理を行う場面に出くわしたときにこのsubmit()を使ったのだけど、とあるページでだけエラーが起きた。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

$('form_id').submit is not a function

</textarea>
<p>こんな感じのエラー。あ、document.get～が$になってるのはprototype.jsを使用してるからね。</p>
<p>いくつかのページで同様の処理を行っていたのだけど、一つのページでだけこのエラーが出て、どうにも先に進まなかった。</p>
<p>で、調べた結果たどり着いたのが<a href="http://www.foxking.org/oldsite/?20070419S1" target="_blank">こちら</a></p>
<p>＞<strong>どうやらidやname属性が &#8220;submit&#8221; になってる部品があると、JavaScriptのFormオブジェクトのsubmit()が上書きされる模様。 </strong></p>
<p>ということなんだそうです。</p>
<p>ああ、言われてみれば確かに。CakePHPでsubmitボタンの種類別の判定をしようとして、$this-&gt;params['form']['submit']に値を入れるために、submitボタンにsubmitっていうname属性をつけていました。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;input type="submit" name="submit" value="送信" /&gt;

//データ送信時の値
$this-&gt;params['form']['submit] =&gt; 送信

</textarea>
<p>確認画面を挟んだ処理とかのときにね、この値をswitch文とかで判定しようと思ってやったことだったんだけど、まさかそれがこんなところに影響を及ぼすとは、思いもよりませんでした。まあ、分かってしまえば解決方法は至って簡単。name属性を別のに変えれば良い。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;input type="submit" name="send" value="送信" /&gt;

//データ送信時
$this-&gt;params['form']['send'] =&gt; 送信

</textarea>
<p>上記の参考サイトさんには、これは当たり前すぎる的なことを書いてあるんですが……そーだったんですか。</p>
<p>でもそういう当たり前のことに気づかないことだって、たまにはあるよね。人間だもの。<br />
（僕の場合は気づかなかったんじゃなくて知らなかっただけですけど……）</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/508/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>背景画像をあらかじめ読み込んでおく</title>
		<link>http://astrodeo.com/blog/archives/481</link>
		<comments>http://astrodeo.com/blog/archives/481#comments</comments>
		<pubDate>Wed, 24 Mar 2010 05:42:01 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/?p=481</guid>
		<description><![CDATA[基本的に画像はキャッシュされていないとページの表示が終わってから読み込まれる。でもたとえば背景に使っている画像などで、ページと同時に表示されている方が望ましい場合も多いかもしれない。この前、デザイナーからそんなような要望が実際にあった。
そんなときはjavascriptで先に画像を読み込んでおくという手もあるっぽい。


&#60;script&#62;

image = new Image();

image.src = 'img/sample.jpg';

&#60;/script&#62;


こんな感じ。
]]></description>
			<content:encoded><![CDATA[<p>基本的に画像はキャッシュされていないとページの表示が終わってから読み込まれる。でもたとえば背景に使っている画像などで、ページと同時に表示されている方が望ましい場合も多いかもしれない。この前、デザイナーからそんなような要望が実際にあった。</p>
<p>そんなときはjavascriptで先に画像を読み込んでおくという手もあるっぽい。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;script&gt;

image = new Image();

image.src = 'img/sample.jpg';

&lt;/script&gt;

</textarea>
<p>こんな感じ。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/481/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ブロック回避でページの読み込み速度を上げる</title>
		<link>http://astrodeo.com/blog/archives/478</link>
		<comments>http://astrodeo.com/blog/archives/478#comments</comments>
		<pubDate>Wed, 17 Mar 2010 09:10:43 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/?p=478</guid>
		<description><![CDATA[WEBページが読み込まれる際、javascriptの読み込み中は他の読み込み処理がブロックされてしまう。つまり画像なんかは、javascriptが読み込まれると、読み込みが終わるまで画像が読み込まれない。
できればこの処理が並列で行われると良いのだが、現状はSafariやIE8でしか並列処理は実装されていないらしい。そのうち段々と実装されていくらしいけど。
とりえあず、全体的に実装されるまでは何らかの対策を講じようというわけで、その何らかの対策についてですけれど、javascriptを動的にロードすることで、並列処理を可能にする方法がある。
通常、javascriptファイルを読み込む場合は


&#60;head&#62;

&#60;script type="text/javascript" src="js/sample.js"&#62;&#60;/script&#62;

&#60;/head&#62;


headタグの中に↑こんな感じで記述するけれど、これ自体をjavascriptで行うことで、動的な読み込みが可能になる。


&#60;script&#62;

var js = document.createElement('script');

js.type = 'text/javascript';

js.src = 'js/sample.js';

var head = document.getElementsByTagName('head');

head[0].appendChild(js);

&#60;/script&#62;


同様にcssもこの方法で読み込むことも可能っぽい。
参照サイトはこちら。実際に並列処理している様子が分かるますです。
]]></description>
			<content:encoded><![CDATA[<p>WEBページが読み込まれる際、javascriptの読み込み中は他の読み込み処理がブロックされてしまう。つまり画像なんかは、javascriptが読み込まれると、読み込みが終わるまで画像が読み込まれない。</p>
<p>できればこの処理が並列で行われると良いのだが、現状はSafariやIE8でしか並列処理は実装されていないらしい。そのうち段々と実装されていくらしいけど。</p>
<p>とりえあず、全体的に実装されるまでは何らかの対策を講じようというわけで、その何らかの対策についてですけれど、javascriptを動的にロードすることで、並列処理を可能にする方法がある。</p>
<p>通常、javascriptファイルを読み込む場合は</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;head&gt;

&lt;script type="text/javascript" src="js/sample.js"&gt;&lt;/script&gt;

&lt;/head&gt;

</textarea>
<p>headタグの中に↑こんな感じで記述するけれど、これ自体をjavascriptで行うことで、動的な読み込みが可能になる。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;script&gt;

var js = document.createElement('script');

js.type = 'text/javascript';

js.src = 'js/sample.js';

var head = document.getElementsByTagName('head');

head[0].appendChild(js);

&lt;/script&gt;

</textarea>
<p>同様にcssもこの方法で読み込むことも可能っぽい。</p>
<p>参照サイトは<a href="http://yuiblog.com/blog/2008/07/22/non-blocking-scripts/" target="_blank">こちら</a>。実際に並列処理している様子が分かるますです。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/478/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JsDecoderはやるやつだった</title>
		<link>http://astrodeo.com/blog/archives/463</link>
		<comments>http://astrodeo.com/blog/archives/463#comments</comments>
		<pubDate>Fri, 12 Mar 2010 13:28:30 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/?p=463</guid>
		<description><![CDATA[wordpressのビジュアルエディタは、デフォルトの改行はpタグが入りますよね。デフォルトの改行って言い方が正しいのかはよく分からないけど、brタグを挿入したいと思ったら基本的にはshift+enterで改行しますよね。
で、今回それを逆にできないかなって思ったわけですよ。仕様的にそういう要求をされているのかをいまいち掴みかねた部分もあるんですけど、編集画面で改行を1行だけにしてほしい的なことを言われたので、たぶんそんな感じのことを言ってると思ったわけですよ。別に現状で問題なければ、わざわざそんな要求をしてこないと思うし。そう思ったわけですよ。
プラグインとかをいろいろ調べてみたんですけど、自分が調べた限りでは、記事投稿の際にpタグやbrタグを挿入しないプラグインは存在するんですが、それだと本文にも改行が入らないようになってしまうので、もっと別のやり方を考えないといけない。
僕も詳しいことは分かっていないんですけど、enterを押したらpタグを入れてshift+enterだったらbrタグを入れるというのは、wp-includes/js/tinymceの中にあるtiny_mce.jsだかwp-tinymce.jsあたりで制御してるっぽいですね。たぶん、wp-tinymce.jsの方なのかな。だからこのファイルをこねくり回せば何とかなるんじゃないかと思い、とりあえずいろいろこねくり回してみることにしました。この辺り↓のサイトさんを見ても、そんなようなことが書いてあるし。
http://modxcms.com/forums/index.php?topic=15204.0
http://d.hatena.ne.jp/tohokuaiki/20080326/tiny_mce
そういうわけで、いざwp-tinymce.jsの中身を見てみたわけなんですが……まあ～……見づらいっすね。jquery.jsなんかもそうですけど、余計なスペースとか改行を省略するために、1行で全コードを書いてあったりするじゃないっすか。だから追うのが大変でした。wp-tinymce.jsとかも、行数にすると30行足らずしかないから、1行あたりのソースがものすごく長い。某ジャンプ漫画の休載期間並に長い。if文の中にif文があってその中でfor文のループ処理を行っていて、その中でさらにif文を……みたいのが全部1行で書いてありますからね。玉ねぎかっつーの（←？）
まあ結論から言うと、さんざんこねくり回した挙句にenterとshift+enterの挙動を逆にするという操作は結局実現できなかったんですけど、今日はその話はおまけでして……今回はその時にちょっと役に立ったサイトさんがあったので、それを紹介したいというわけなんです、はい。
しかし、最近の僕は「いろいろ頑張った挙句にできませんでした」って感じの記事ばっかりだな……この前のtera termのときといい……ただのダメなやつじゃんねｗｗ。
まあそれは置いといて、今日ご紹介したいのはJs Decoderというサイト。
このサイト、javascriptのコードを貼っつけてdecodeってやると、良い感じにdecodeしてくれるんすよ。ためしにwp-tinymce.jsとかデコードしてみたんすけど、もう見やすさが違い過ぎました。美人は三日で飽きる、ブスは三日で慣れるなんて昔の人は言ったもんですが、見づらいソースは何日経っても見づらいですよね。見やすいソースは何日経っても見やすい。そりゃそうだ。
っていうか、wp-tinymce.jsとか、デコードすると普通に15000行とかあるんすけど……それを30行程度で記述するって、どんだけっすか。
このJs Decoder、個人的には結構便利だなと思いました。インデントとかもちゃんと取って表示してくれるし。
]]></description>
			<content:encoded><![CDATA[<p>wordpressのビジュアルエディタは、デフォルトの改行はpタグが入りますよね。デフォルトの改行って言い方が正しいのかはよく分からないけど、brタグを挿入したいと思ったら基本的にはshift+enterで改行しますよね。</p>
<p>で、今回それを逆にできないかなって思ったわけですよ。仕様的にそういう要求をされているのかをいまいち掴みかねた部分もあるんですけど、編集画面で改行を1行だけにしてほしい的なことを言われたので、たぶんそんな感じのことを言ってると思ったわけですよ。別に現状で問題なければ、わざわざそんな要求をしてこないと思うし。そう思ったわけですよ。</p>
<p>プラグインとかをいろいろ調べてみたんですけど、自分が調べた限りでは、記事投稿の際にpタグやbrタグを挿入しないプラグインは存在するんですが、それだと本文にも改行が入らないようになってしまうので、もっと別のやり方を考えないといけない。</p>
<p>僕も詳しいことは分かっていないんですけど、enterを押したらpタグを入れてshift+enterだったらbrタグを入れるというのは、wp-includes/js/tinymceの中にあるtiny_mce.jsだかwp-tinymce.jsあたりで制御してるっぽいですね。たぶん、wp-tinymce.jsの方なのかな。だからこのファイルをこねくり回せば何とかなるんじゃないかと思い、とりあえずいろいろこねくり回してみることにしました。この辺り↓のサイトさんを見ても、そんなようなことが書いてあるし。</p>
<p><a href="http://modxcms.com/forums/index.php?topic=15204.0" target="_blank">http://modxcms.com/forums/index.php?topic=15204.0</a></p>
<p><a href="http://d.hatena.ne.jp/tohokuaiki/20080326/tiny_mce" target="_blank">http://d.hatena.ne.jp/tohokuaiki/20080326/tiny_mce</a></p>
<p>そういうわけで、いざwp-tinymce.jsの中身を見てみたわけなんですが……まあ～……見づらいっすね。jquery.jsなんかもそうですけど、余計なスペースとか改行を省略するために、1行で全コードを書いてあったりするじゃないっすか。だから追うのが大変でした。wp-tinymce.jsとかも、行数にすると30行足らずしかないから、1行あたりのソースがものすごく長い。某ジャンプ漫画の休載期間並に長い。if文の中にif文があってその中でfor文のループ処理を行っていて、その中でさらにif文を……みたいのが全部1行で書いてありますからね。玉ねぎかっつーの（←？）</p>
<p>まあ結論から言うと、さんざんこねくり回した挙句にenterとshift+enterの挙動を逆にするという操作は結局実現できなかったんですけど、今日はその話はおまけでして……今回はその時にちょっと役に立ったサイトさんがあったので、それを紹介したいというわけなんです、はい。</p>
<p>しかし、最近の僕は「いろいろ頑張った挙句にできませんでした」って感じの記事ばっかりだな……この前の<a href="http://astrodeo.com/blog/archives/454">tera term</a>のときといい……ただのダメなやつじゃんねｗｗ。</p>
<p>まあそれは置いといて、今日ご紹介したいのは<a href="http://www.gosu.pl/decoder/" target="_blank">Js Decoder</a>というサイト。</p>
<p>このサイト、javascriptのコードを貼っつけてdecodeってやると、良い感じにdecodeしてくれるんすよ。ためしにwp-tinymce.jsとかデコードしてみたんすけど、もう見やすさが違い過ぎました。美人は三日で飽きる、ブスは三日で慣れるなんて昔の人は言ったもんですが、見づらいソースは何日経っても見づらいですよね。見やすいソースは何日経っても見やすい。そりゃそうだ。</p>
<p>っていうか、wp-tinymce.jsとか、デコードすると普通に15000行とかあるんすけど……それを30行程度で記述するって、どんだけっすか。</p>
<p>このJs Decoder、個人的には結構便利だなと思いました。インデントとかもちゃんと取って表示してくれるし。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/463/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javascriptでのfalse,null,0などの関係</title>
		<link>http://astrodeo.com/blog/archives/422</link>
		<comments>http://astrodeo.com/blog/archives/422#comments</comments>
		<pubDate>Mon, 15 Feb 2010 08:57:31 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/?p=422</guid>
		<description><![CDATA[phpなんかでもそうだが、基本的にfalseやnull、0は等しいものとして扱うことができる。この場合の等しいというのは==で比較した場合の話で、===で比較すると、型が違うから同じものとして扱うことはできない。
で、javascriptの話だけど、javascriptでalertを使っていると、ときどき『undefined』という文字列を目にする。まあ、要は値が何にもねーぞこのやろうってなことを言ってるんでしょうけど、このundifinedやfalse、nullに0、果ては空文字や改行コードのみ（\n）のそれぞれを==で比較した場合に、trueが返ってくる場合とfalseが返ってくる場合が結構ごちゃまぜになっているような印象を受ける。
まず、0や改行コードのみ、空文字はfalseと==で比較するとtrueが返ってくる。でもnullやundifinedはfalseが返ってくる。falseで比較してるのにtrueが返ってくるとか何かややこしいことを言っているけれど、要は等しいかどうかってこと。trueが返ってくれば等しいと判断できる。
false と 0、\n、空文字 =&#62; 等しい
false と null、undifined =&#62; 等しくない
こんな感じ。
ここから判断するに、nullとundifinedは等しいっぽい。0と\nと空文字も等しいと思われる。でも例えばnullと空文字なんかは等しくないようだ。


funciton test(str) {

    if(str == null) {

        alert('null');

    }

}


前にこんなようなif文を書いた時に、strの中身は空文字なのになぜかalert文が出ないな～って思ったことがあったんですけど、どうやらそういうことらしい。
あと、そう。FirefoxとIEで違う動きをしたこともありました。
というのも、自分ではstrにnullを入れてたつもりなのに、何かFirefoxかIEのどちらかは（どっちかはちょっと忘れた）勝手に改行コードを入れたりすることがあって、それで何度やってもalertが出なかった、みたいなことがありました。多分、firebugでDOMを調べたら改行コードが入ってるのが分かったような気がするから、Firefoxの方がそうだったかもしれないね。
一度自分の中で整理しておきたかったので、メモ。
こちらを見ると、上記のそれぞれの比較が表で見やすくまとめられているので、参考になるよ。
]]></description>
			<content:encoded><![CDATA[<p>phpなんかでもそうだが、基本的にfalseやnull、0は等しいものとして扱うことができる。この場合の等しいというのは==で比較した場合の話で、===で比較すると、型が違うから同じものとして扱うことはできない。</p>
<p>で、javascriptの話だけど、javascriptでalertを使っていると、ときどき『undefined』という文字列を目にする。まあ、要は値が何にもねーぞこのやろうってなことを言ってるんでしょうけど、このundifinedやfalse、nullに0、果ては空文字や改行コードのみ（\n）のそれぞれを==で比較した場合に、trueが返ってくる場合とfalseが返ってくる場合が結構ごちゃまぜになっているような印象を受ける。</p>
<p>まず、0や改行コードのみ、空文字はfalseと==で比較するとtrueが返ってくる。でもnullやundifinedはfalseが返ってくる。falseで比較してるのにtrueが返ってくるとか何かややこしいことを言っているけれど、要は等しいかどうかってこと。trueが返ってくれば等しいと判断できる。</p>
<p>false と 0、\n、空文字 =&gt; 等しい</p>
<p>false と null、undifined =&gt; 等しくない</p>
<p>こんな感じ。</p>
<p>ここから判断するに、nullとundifinedは等しいっぽい。0と\nと空文字も等しいと思われる。でも例えばnullと空文字なんかは等しくないようだ。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

funciton test(str) {

    if(str == null) {

        alert('null');

    }

}

</textarea>
<p>前にこんなようなif文を書いた時に、strの中身は空文字なのになぜかalert文が出ないな～って思ったことがあったんですけど、どうやらそういうことらしい。</p>
<p>あと、そう。FirefoxとIEで違う動きをしたこともありました。</p>
<p>というのも、自分ではstrにnullを入れてたつもりなのに、何かFirefoxかIEのどちらかは（どっちかはちょっと忘れた）勝手に改行コードを入れたりすることがあって、それで何度やってもalertが出なかった、みたいなことがありました。多分、firebugでDOMを調べたら改行コードが入ってるのが分かったような気がするから、Firefoxの方がそうだったかもしれないね。</p>
<p>一度自分の中で整理しておきたかったので、メモ。</p>
<p><a href="http://screw-axis.com/2009/05/17/javascript%E3%81%AEnull%E3%81%A8undefined%E3%81%A8false%E3%81%A80%E3%81%A8%E7%A9%BA%E6%96%87%E5%AD%97%E3%81%A8/">こちら</a>を見ると、上記のそれぞれの比較が表で見やすくまとめられているので、参考になるよ。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/422/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQueryで画像の遅延読み込みを可能にするlazyload</title>
		<link>http://astrodeo.com/blog/archives/409</link>
		<comments>http://astrodeo.com/blog/archives/409#comments</comments>
		<pubDate>Mon, 08 Feb 2010 02:36:25 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/?p=409</guid>
		<description><![CDATA[画像の多いページは、どうしても読み込むのに時間がかかってしまう。
そこで、画像の読み込みのタイミングを遅らせてページの表示を早めようという試みを可能にするのが、Lazy Loadというプラグイン。
やっていることは、画像を読み込ませる部分に別の軽い画像を代替的に読み込ませることで負荷を軽減するような感じ……で合ってるのかな。
まずは上記のリンク先からlazyloadをダウンロードしてくる。あとjqueryがないと動かないので、持ってなければダウンロードしておく。


&#60;img src="sample.jpg" /&#62;

&#60;img src="sample2.jpg" /&#62;


まあ、たとえばこんな感じで画像を呼んでいるソースがあったとする。


&#60;script&#62;

$(function(){

    $("img").lazyload({

        placeholder: "dummy.gif",

        event: "click"

    });

});

&#60;/script&#62;


これでimgタグで呼んでいるsample.jpgやsample2.jpgがdummy.gifに置き換わる。event: &#8220;click&#8221;というのは画像をクリックしたらsample.jpgなどを読み込むようにしている。デフォルトはページスクロールで画像を読み込むようになっているらしい。
dummy.gifを1px×1pxのgif画像とかにしておけば一つのページに100個とか200個くらい画像を出しているときなんかはそれなりに読み込みが早くなる……と思う。
]]></description>
			<content:encoded><![CDATA[<p>画像の多いページは、どうしても読み込むのに時間がかかってしまう。</p>
<p>そこで、画像の読み込みのタイミングを遅らせてページの表示を早めようという試みを可能にするのが、<a href="http://www.appelsiini.net/projects/lazyload">Lazy Load</a>というプラグイン。</p>
<p>やっていることは、画像を読み込ませる部分に別の軽い画像を代替的に読み込ませることで負荷を軽減するような感じ……で合ってるのかな。</p>
<p>まずは上記のリンク先からlazyloadをダウンロードしてくる。あとjqueryがないと動かないので、持ってなければダウンロードしておく。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;img src="sample.jpg" /&gt;

&lt;img src="sample2.jpg" /&gt;

</textarea>
<p>まあ、たとえばこんな感じで画像を呼んでいるソースがあったとする。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;script&gt;

$(function(){

    $("img").lazyload({

        placeholder: "dummy.gif",

        event: "click"

    });

});

&lt;/script&gt;

</textarea>
<p>これでimgタグで呼んでいるsample.jpgやsample2.jpgがdummy.gifに置き換わる。event: &#8220;click&#8221;というのは画像をクリックしたらsample.jpgなどを読み込むようにしている。デフォルトはページスクロールで画像を読み込むようになっているらしい。</p>
<p>dummy.gifを1px×1pxのgif画像とかにしておけば一つのページに100個とか200個くらい画像を出しているときなんかはそれなりに読み込みが早くなる……と思う。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/409/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>画像を投稿したら自動でhighslideが動くようにする</title>
		<link>http://astrodeo.com/blog/archives/226</link>
		<comments>http://astrodeo.com/blog/archives/226#comments</comments>
		<pubDate>Tue, 29 Sep 2009 03:15:26 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/archives/226</guid>
		<description><![CDATA[ページ内にあるサムネイル画像をクリックするとビュイーンと画像がおっきくなるhighslide JS。
 結構いろんなところで使われていると思いますし、僕が手がけるサイトでも、ブログ機能なんかをつける場合はだいたいhighslideをつけてくれという指示をいただきます。
通常、highslideを動かすためには↓こんなようなソースを書く必要がある。

&#60;head&#62;
&#60;script type="text/JavaScript" src="/js/highslide/highslide.js"&#62;&#60;/script&#62;
&#60;script&#62;
 hs.graphicsDir = "/js/highslide/graphics/";
 hs.outlineType = "rounded-white";
&#60;/script&#62;

&#60;body&#62;
&#60;div id="content"&#62;

&#60;a href="http://sample.net/images/sample.jpg" mce_href="http://sample.net/images/sample.jpg" class="highslide" onclick="return hs.expand(this)"&#62;&#60;img src="sample.jpg" /&#62;&#60;/a&#62;

&#60;/div&#62;
&#60;/body&#62;

要はhighslide.jsを読み込んでaタグにクリック時のイベントを書けば動くわけですが、ブログで記事を書くときに毎回これを書くのは面倒だし、ユーザビリティを考えてもこれを自分で書かせるのはあまりよろしくはない。
そこで、画像を投稿したら勝手にhighslideが動くようなjavascriptでも書いておけば、便利じゃないかな～と思う。それなら画像を投稿するだけで良いもんね。

&#60;script&#62;
addHighslide = function() {
    var id = 'content';
   
    if(id) {
        var element = document.getElementById(id);

        if(!element) {
            return;
        }
    } else {
        element = document.body;
    }

    var images = element.getElementsByTagName('a');

    for(var i = 0; i &#60; images.length; i++) {
        if(images[i].firstChild.tagName == [...]]]></description>
			<content:encoded><![CDATA[<p>ページ内にあるサムネイル画像をクリックするとビュイーンと画像がおっきくなるhighslide JS。</p>
<p> 結構いろんなところで使われていると思いますし、僕が手がけるサイトでも、ブログ機能なんかをつける場合はだいたいhighslideをつけてくれという指示をいただきます。</p>
<p>通常、highslideを動かすためには↓こんなようなソースを書く必要がある。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">
&lt;head&gt;
&lt;script type="text/JavaScript" src="/js/highslide/highslide.js"&gt;&lt;/script&gt;
&lt;script&gt;
 hs.graphicsDir = "/js/highslide/graphics/";
 hs.outlineType = "rounded-white";
&lt;/script&gt;

&lt;body&gt;
&lt;div id="content"&gt;

&lt;a href="http://sample.net/images/sample.jpg" mce_href="http://sample.net/images/sample.jpg" class="highslide" onclick="return hs.expand(this)"&gt;&lt;img src="sample.jpg" /&gt;&lt;/a&gt;

&lt;/div&gt;
&lt;/body&gt;
</textarea>
<p>要はhighslide.jsを読み込んでaタグにクリック時のイベントを書けば動くわけですが、ブログで記事を書くときに毎回これを書くのは面倒だし、ユーザビリティを考えてもこれを自分で書かせるのはあまりよろしくはない。</p>
<p>そこで、画像を投稿したら勝手にhighslideが動くようなjavascriptでも書いておけば、便利じゃないかな～と思う。それなら画像を投稿するだけで良いもんね。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">
&lt;script&gt;
addHighslide = function() {
    var id = 'content';
   
    if(id) {
        var element = document.getElementById(id);

        if(!element) {
            return;
        }
    } else {
        element = document.body;
    }

    var images = element.getElementsByTagName('a');

    for(var i = 0; i &lt; images.length; i++) {
        if(images[i].firstChild.tagName == 'img') {
            images[i].className = 'highslide';

            if(IE='\v'=='v') {
                images[i].setAttribute('onclick', new Function('return hs.expand(this)'));
            } else {
                images[i].setAttribute('onclick', 'return hs.expand(this)');
            }
        }
    }
}
&lt;/script&gt;
</textarea>
<p>何をやっているかというと、要はid=&#8217;content&#8217;で囲われた中にある文の中からaタグを探してきて、その中にimgタグがあったら、highslide属性を付け足しますよということです。単純にaタグだけ拾ってきてhighslide属性をつけたら、ただのリンクにもついちゃいますからね。</p>
<p>とりあえずはこんなjavascriptのコードを書いて、addHighslide.jsとでも適当に名前をつけて&lt;head&gt;&lt;/head&gt;の中で読み込む。あとはfooterの部分、&lt;/body&gt;の前にでも以下のコードを書けばＯＫ。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">
&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
addHighslide();
//]]&gt;
&lt;/script&gt;
</textarea>
<p>これは、一度ページを全部読み込んでから上のjavascriptを実行させますよってこと。</p>
<p>if(IE=&#8217;\v&#8217;==&#8217;v')は、使っているブラウザがIEかどうかを判定しています。理由はあまりよく分かっていないんだけど、IEだとsetAttribute(&#8216;onclick&#8217;, &#8216;return hs.expand(this)&#8217;)って書いても上手くhighslide属性がつかないので、こんな場合分けをしてあげないといけない。</p>
<p>これを書いておけば、いちいち自分でブログを更新するときにaタグの中にclass=&#8221;highslide&#8221;やら何やらを書かなくても大丈夫。誰がブログを更新してもhighslideが使えますね。</p>
<p>ちなみにこのソースを書くにあたり、<a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839927790/customsite-22/ref=nosim/">こちらの本</a>を参考にさせていただきました。ていうか、ほぼパクリ。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/226/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>昨日の続き＋背景の透明化</title>
		<link>http://astrodeo.com/blog/archives/205</link>
		<comments>http://astrodeo.com/blog/archives/205#comments</comments>
		<pubDate>Thu, 18 Jun 2009 01:20:21 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/archives/205</guid>
		<description><![CDATA[embed要素のwidthとかheightがjavascriptでうまく書き換えられないとか言ってたけど、そんなことなかった。
 setAttributeってやつを使って属性を変更してやれば、ちゃんとできる。


var tags = document.getElementsByTagName('embed');

for(var i = 0; i &#60; tags.length; i++) {

     var tag = tags[i];

     tag.setAttribute('width' , 335);

     tag.setAttribute('height', 275);

}


document.getElementsByTagName(&#8216;tag&#8217;)はタグ情報を配列で返してくるから、変数tagsは配列になっている。tags.lengthで配列の数を取得できる。ページ内に仮にembedタグが4つあればtags.lengthは当然4になる。
たぶん、自分はここが分かっていなかったから


var tag = document.getElementsByTagName('embed');

tag.width = 335;


みたいなことをやろうとして失敗していたのだと思う。
追記
Flashムービーの背景を透明化するにはembed要素にwmode=&#8221;transparent&#8221;という属性を付加してやればよい。あとobject要素内にparam要素も追加する必要がある。後者については今回は省略させてもらうとして、前者のembed要素にwmode属性を追加するときの個人的な注意点。


※上記のfor文の中に↓この1行が追加されたと思ってください。

tag.setAttribute('wmode', 'transparent');


属性を付加するだけならこれでOKなのだけど、xhtmlにおいて、閉じタグがないような場合、半角スペースとスラッシュをタグの中に書くというルールがある。
たとえば上のようなやり方でwmode属性を追加した場合、Firebugとかでソースを確認すると、こんな感じになる。


&#60;embed src= ・・・中略・・・ wmode="transparent"/&#62;


スラッシュの前に半角スペースが入っていない。これだと残念ながら背景は透明化されない。正規表現を使った置換でも何でもいいけど、とりあえずこの部分に半角スペースを入れないといけないようだ。ちなみに僕はPHPのereg_replace関数を使った。
正直、この半角スペースは入れなきゃいけないものだなんてこと知らなくて、どうして背景が透明化されないのか、昨日2時間くらい悩んだ。でも無事に解決して良かったっす。
問題の解決にあたり、こちらのサイトを参考にさせていただきました。
]]></description>
			<content:encoded><![CDATA[<p>embed要素のwidthとかheightがjavascriptでうまく書き換えられないとか言ってたけど、そんなことなかった。</p>
<p> setAttributeってやつを使って属性を変更してやれば、ちゃんとできる。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

var tags = document.getElementsByTagName('embed');

for(var i = 0; i &lt; tags.length; i++) {

     var tag = tags[i];

     tag.setAttribute('width' , 335);

     tag.setAttribute('height', 275);

}

</textarea>
<p>document.getElementsByTagName(&#8216;tag&#8217;)はタグ情報を配列で返してくるから、変数tagsは配列になっている。tags.lengthで配列の数を取得できる。ページ内に仮にembedタグが4つあればtags.lengthは当然4になる。</p>
<p>たぶん、自分はここが分かっていなかったから</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

var tag = document.getElementsByTagName('embed');

tag.width = 335;

</textarea>
<p>みたいなことをやろうとして失敗していたのだと思う。</p>
<h3>追記</h3>
<p>Flashムービーの背景を透明化するにはembed要素にwmode=&#8221;transparent&#8221;という属性を付加してやればよい。あとobject要素内にparam要素も追加する必要がある。後者については今回は省略させてもらうとして、前者のembed要素にwmode属性を追加するときの個人的な注意点。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

※上記のfor文の中に↓この1行が追加されたと思ってください。

tag.setAttribute('wmode', 'transparent');

</textarea>
<p>属性を付加するだけならこれでOKなのだけど、xhtmlにおいて、閉じタグがないような場合、半角スペースとスラッシュをタグの中に書くというルールがある。</p>
<p>たとえば上のようなやり方でwmode属性を追加した場合、Firebugとかでソースを確認すると、こんな感じになる。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;embed src= ・・・中略・・・ wmode="transparent"/&gt;

</textarea>
<p>スラッシュの前に半角スペースが入っていない。これだと残念ながら背景は透明化されない。正規表現を使った置換でも何でもいいけど、とりあえずこの部分に半角スペースを入れないといけないようだ。ちなみに僕はPHPのereg_replace関数を使った。</p>
<p>正直、この半角スペースは入れなきゃいけないものだなんてこと知らなくて、どうして背景が透明化されないのか、昨日2時間くらい悩んだ。でも無事に解決して良かったっす。</p>
<p>問題の解決にあたり、<a href="http://www.koikikukan.com/archives/2006/03/17-021717.php">こちらのサイト</a>を参考にさせていただきました。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/205/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javascriptによるページ読み込み時のイベント</title>
		<link>http://astrodeo.com/blog/archives/201</link>
		<comments>http://astrodeo.com/blog/archives/201#comments</comments>
		<pubDate>Wed, 10 Jun 2009 00:30:48 +0000</pubDate>
		<dc:creator>マッチー</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://astrodeo.com/blog/archives/201</guid>
		<description><![CDATA[javascriptで、ページを読み込んだときにイベントを起こすにはonloadを使えばいいが、特定のエレメントに何かをするのではなくonloadを発生させたいようなときにはどうすればいいか。


&#60;script&#62;

function message() {

     alert('ページが開きました');

}

&#60;/script&#62;

&#60;body onload="message();"&#62;


最初はこんな感じでbodyタグに書けば何とかなるんじゃね？って思ってやってみたんだけど、上手く動かなかった。
エレメントに関係なくonloadなんかを使いたい場合には、windowを使うといいらしい。


&#60;script&#62;

window.onload = function message() {

     alert('ページが開きました');

}

&#60;/script&#62;


こう書いておけば、ページが読み込まれたときにメッセージボックスが開かれる。
]]></description>
			<content:encoded><![CDATA[<p>javascriptで、ページを読み込んだときにイベントを起こすにはonloadを使えばいいが、特定のエレメントに何かをするのではなくonloadを発生させたいようなときにはどうすればいいか。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;script&gt;

function message() {

     alert('ページが開きました');

}

&lt;/script&gt;

&lt;body onload="message();"&gt;

</textarea>
<p>最初はこんな感じでbodyタグに書けば何とかなるんじゃね？って思ってやってみたんだけど、上手く動かなかった。</p>
<p>エレメントに関係なくonloadなんかを使いたい場合には、windowを使うといいらしい。</p>
<textarea name="code" class="PHP:nocontrols" cols="30" rows="5">

&lt;script&gt;

window.onload = function message() {

     alert('ページが開きました');

}

&lt;/script&gt;

</textarea>
<p>こう書いておけば、ページが読み込まれたときにメッセージボックスが開かれる。</p>
]]></content:encoded>
			<wfw:commentRss>http://astrodeo.com/blog/archives/201/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
