2008年 06月 23日

Firefox3 + Firebug 1.2.0b3 でハマった

なんかよくわからないんだけど

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja" dir="ltr">
	<head>

		<script type="text/javascript" src="uuu.js"></script>
		<script type="text/javascript" src="test.js"></script>
		<script type="text/javascript" src="foobar.js"></script>
	</head>
	<body>

	</body>
</html>
// uuu.js

typeof(console);

/*
 * typeof(console) を src でよみこんだスクリプトでやるとダメ
 * typeof(window["console"]); もだめ
 *
 */
// test.js
(function() {
	var scripts = document.getElementsByTagName('script');
	var script  = scripts[scripts.length - 1];
	alert(script.src);
})();

こうすると alert で test.js が alert されない。なぜか script.src が undefined になってしまう。Firebug を Disabled にすれば大丈夫。これ困る……

alert(window.__lookupGetter__("console"));

してみると

function () {
    return window.loadFirebugConsole();
}

ってなってる。

console を参照できるかどうか試すコードを書きたいなら

if (
	(
	 typeof(window["__lookupGetter__"]) == "function" &&
	 typeof(window.__lookupGetter__("console")) == "undefined" && typeof(window["console"]) == "undefined"
	) ||
	typeof(window["console"]) == "undefined"
) {
	alert("console is undefined");
}

と書いたほうがいいっぽいなぁ。もちろん Firebug の変更によってまただめになるだろうから、とても adhoc すぎてウンコなんだけど……