プログラミング: 2015年4月アーカイブ

Internet Explorer で使うのを前提とした Web 画面を開発してるんだが、IE のデバッガ(F12 押下で表示するやつ)使えねぇ~

JavaScript に文法エラーとかあると(つまり、曲がりなりにもロード時にはエラーが出ない状態にしておかないと)、端から読み込みもしないのでデバッガに問題の JavaScript が表示されないという(^^;
デバッガの意味がねえじゃん!!(^^;

こういう時はどうするかというと、その画面を Chrome で開いて、「メニュー」→「その他のツール」→「JavaScript コンソール」で JavaScript のデバッガ起動。

Chrome のデバッガは、ちゃんと「Uncaught SyntaxError: Unexpected token ILLEGAL  hogehoge.js:288」と表示してくれるので、288行目に文法エラーがあるんだなってわかる。
(実際、この時は「コメントのつもりで、# を行頭に打ってた」・・・それ Perl や!(^^;)

なんで、こう、Microsoft という会社は、あれもこれも気が利かんのかねえ・・・

そして、社内 Web システムで InternetExplorer を「標準ブラウザ」とする流れも、そろそろ断ち切らないといかんのお・・・と思う西島秀俊似(特に身体が)のプログラマだったのであった・・・
今まで、自分で JavaScript を触ることがあんまりなかったので、この中途半端な「型への寛容さ」に苛つきながらコード書いてます(^^;

変数宣言時に特に型を宣言することなく使えるのは Perl などのスクリプト言語と一緒だけど、なんか中途半端なんだよなあ>JavaScript

例えば、

var a = 100;
var b = 50;

と変数を宣言して、

var c = a + b;

とかすると、変数 c には '10050' って文字列として結合されたものが代入されちゃう。
Perl のように、「.(文字の結合)」と「+(数字の足し算)」と言うように演算子が個別に用意されてないから仕方ないんだけど、
こういう時、いちいち

var c = parseInt(a) + parseInt(b);

とか書くの面倒くせえ!!

しかも、その後でこの変数 c を正規表現使って、

c = c.replace( /(\d)(?=(\d\d\d)+(?!\d))/g, '$1,');

こんなふうに「3桁ずつカンマを打つ」処理しようとしたら、「オブジェクトは'replace'プロパティまたはメソッドをサポートしていません。」のエラーが・・・とほほ・・・

これ、変数 c が「数値型」の変数になってるためで、例えば、

c = c + ""

みたいな「文字列としての計算」を replace メソッドを使う前にダミーでしてやればエラーは出ない。
replace メソッドが文字型の変数しか受け付けないというわけだ。

中途半端~(^^;
そんなん、replace メソッドが使われた時は、自動で文字型にキャストすればええやん(^^;

まったく、JavaScript の、この変数型について「寛容」なのか「厳格」なのかわからないところが嫌い(^^;

「厳格」ではないけど「狭量」って感じか・・・(^^;
・・・という初歩的な反省をしなといけないとは・・・疲れてたんだな、俺。今日はゆっくり眠るよ。

いや、昨日、つまらないことでハマってしまったもんで(^^;

お客さんのところの Web のデザインが変わったため、2年ほど前に俺の書いた JavaScript を直したんだけど、これが上手く動かない。

設定ファイルを読み込んで、そのファイルに書かれている内容にしたがって createElement して動的に画面をデザインしていくスクリプトなんだけど、その時点で 17個くらいあるうちの 1個目の設定を読み込んだところで終了してしまう。
2個目の設定を読まないのだ。
今回から、文字コードが変わったし、その辺の影響なのかなと、状況分析するのにずいぶんな時間が・・・

で、調査していると、一度だけ上手く動いたんだよね。

「おお!」と思って、それまでデバッグ用に埋め込んでいた alert 文をコメントにして実行すると、また 1個目の設定しか読まない形に逆戻り・・・(^^;;;

「ああ、alert をコメントにした時に、何か変な修正かけちゃったかな?」とまた調査・・・

いい加減嫌気がさしていた時に、

Uncaught TypeError: Cannot read property 'appendChild' of null

なエラーが出て、やっと原因がわかった。

「ああ・・・まだ HTML の読込が要素追加の場所にまで達していないのね・・・」と。

どういうことかというと、動的に生成した HTML 要素を差し込む場所がまだ読み込まれていない、存在していない状態だった。自動車を納車に行ったら、まだ車庫が完成してなくて車を置けなかった・・・みたいな(笑)

どこに生成した要素を差し込むか、

<div id="start_point"> 

みたいに開始場所のタグに ID で名前をつけて、JavaScript 内で 

var elm = document.getElementById("start_point");
elm.appendChild(newDiv);

と、その ID の場所を指定して差し込むわけだけど、この <div id="start_point"> と書かれた部分まで HTML が読み込まれてないので、「start_point なんて無いで!?」というエラーとなってしまうわけである。

HTML の読み込みが終わる寸前、</html> の前あたりで明示的に JavaScript を実行させてやればいいだけで、</html> の直前に、

<script type="text/javascript">
//<!--
startProcess();
//-->
</script>

という具合に、JavaScript の関数の実行命令を書くだけである。

以前は <head></head> 内に上記の実行命令を書いていたが何の問題もなかったことと、上手いこと 1回目の処理が終わったところでエラーも出さずに処理が中断していたため、こんな初歩的な理由になかなか辿り着かなかった。
今回、前回のデザインよりも HTML が大きくなっていることや、読み込む jQuery のプラグインが増えてることなどで、こういう状況になっちゃったんだろうなあ・・・

いやあ、疲れた。お陰で昨夜は深夜 2時すぎまでこの対応で起きていた。
今日は早く寝よう!(と思ったら、もう深夜 1時半である・・・(^^;)

このアーカイブについて

このページには、2015年4月以降に書かれたブログ記事のうちプログラミングカテゴリに属しているものが含まれています。

前のアーカイブはプログラミング: 2015年3月です。

次のアーカイブはプログラミング: 2015年5月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら