汚染源は McAfee SiteAdvisor だった!!
Mozex 1.9.5 が動かないのも Make Link 3.0.2 が動かないのも、McAfee SiteAdvisor が Array クラス*1を汚染しているのが原因だった。
McAfee SiteAdvisor は、起動されると https://sadownload.mcafee.com/products/sa/firefox/search.dat をダウンロードするのだが、実はこの中身は JavaScript スクリプトで、これを eval することでスクリプトを拡張している。
しかし、この search.dat はグローバル空間を汚染しまくっており、中でも Mozex や Make Link が動かない原因になっているのが、次の部分だ。
Array.prototype.inArray = function (value) { var i; for (i=0; i < this.length; i++) { if (this[i] === value) { return true; } } return false; };
これにより、for...in 命令の結果が変わってしまう。
例
ary = new Array(); ary["apple"] = 100; ary["orange"] = 120; for (var i in ary) { alert(ary[i]); }
実行結果
100 120 function (value) { var i; for (i=0; i < this.length; i++) { if (this[i] === value) { return true; } } return false; }
まったく、困ったもんだね (`ω´♯)
という訳で、McAfee SiteAdvisor は ポイッ(/--)/ ⌒● した。
*1:JavaScript では、オブジェクトと表現するのが正しい?