人間の知恵の結晶

これはアークエンジェル達の肖像画だな。あいつら、こんなもの飾って何のつもりだ?


	
		
		
			window.onload = function(){
				var iframe = document.getElementsByTagName("iframe")[0];
				iframe.contentDocument.designMode = "on";
				
				iframe.contentDocument.addEventListener("keyup", function(){
				    var range = iframe.contentWindow.getSelection().getRangeAt(0);
				    if(range.startContainer.nodeValue == "a ") alert("a[space]");
				    if(range.startContainer.nodeValue == "a") alert("a");
				    if(range.startContainer.nodeValue == "a a") alert("a[space]a");
				}, false);
			}
		
	
	

どーうしたイーノック? ずぶ濡れじゃないか

入力値 Chrome(7.0.517.44) Firefox(3.6.11) Opera(10.63)
"a" alert発生 alert発生 alert発生
"a " 何も起きない alert発生 何も起きない
"a a" alert発生 alert発生 alert発生

あーこれ?

これは傘だよ。


@umimaruさんとか@dynamis2さんとか@takkkunに「大丈夫か?」って聞かれたので「一番良いアドバイスを頼む」と答えてないけど色々教えて頂きました。
「比較演算子の罠なんじゃね?」とか「"\n"が文字列に入ってるんじゃね?」とかアドバイスを頂いたんですが、どうやらコレそういう問題じゃないよーな気がするんだぜ……


最初はChromeのバグかと思ったんだけど、Operaで試したら同じ挙動を示したのでバグなのかどうか判別しづらいんだよね……
ただ、Chromeのデバッガは入力値が"a "の時、range.startContainer.nodeValueの値も"a "なので、==演算子でtrueを返さないのはなんかとても気持ち悪いんだよね

人間の知恵の結晶(解決編)

よしわかった、説明しよう。

これはNBSPだ。
神が創り出した知恵の一つ。いや、"\xA0"か。
人類が決して辿り着く事の出来ない神の英知として、神が我々に与えた物だ。
昔天界で起きた大きな抗争バグの時にな。あの時はほんと・・・まいったよ。

さっ、まずは広げてみるか

アークエンジェル達の肖像画のコード

if(range.startContainer.nodeValue == "a ") alert("a[space]");

if(range.startContainer.nodeValue == "a\xA0") alert("a[space]");

に書き換えるんだ。

見ての通り、ChromeでもOperaでも動く素晴らしいコードだろ?

気をつけろ、Fxで動かすと一瞬で浄化されてしまうぞ。
浄化とは何かだって? それは昨日(ry

これはベイル\xA0、奪い取ってみるといい

良い勉強をさせて頂きましたorz
どうやら世の中のUTF-8には" "と"\xA0"という二種類の空白が存在するみたいですよ。