リンク先の画像をページに埋め込むブックマークレット

掲示板とかでこんな感じに貼られているURLを

こうするスクリプト

ソースはこんな感じ。
IEだと長いスキームはエラーになるので出来るだけ文字数を節約しようとするため見にくくなりがち。

(function ()
{
//画像のサイズを整える function ig(e, x)
{
//画像オブジェクト作成 (g = new Image()).src = e.src;
if (!g.width) {
//404などで正しくないイメージの場合はノードを非表示 e.parentNode.style.display = "none";
}
else if (g.width > g.height) {
//横の方が大きいときの処理 e.style.width = x + "px";
e.style.height = "auto";
}
else {
//縦の方が大きいときの処理 e.style.width = "auto";
e.style.height = x + "px";
}
};
for (i = 0; i < document.getElementsByTagName("a").length; i++)
{
e = document.getElementsByTagName("a")[i];
//2chのリンクはime.nuがくっついてるので取り除く e.href = e.href.replace(/(ime.nu\/|ime.st\/)/, "");
//画像でなければこの先の処理をスキップ if (/\.(jpg|png|gif|bmp)$/.test(e.href) == false) {
continue;
};
//改行させる e.appendChild(document.createElement("br"));
//img要素を作成 ad = document.createElement("img");
//src属性を設定 ad.src = e.href;
//とりあえずサイズは横128pxで縦はauto ad.style.width = "128px";
//img要素を追加 e.appendChild(ad);
//eの2つめの子どもがimg要素になっている(<a><br><img></a>) im = e.childNodes[2];
//画像が読み込まれたら整形 im.onload = function ()
{
ig(this, 128)
};
//404などで画像が正しく読めなかった場合 im.onerror = function ()
{
ig(this, 128)
};
//マウスを乗せると拡大 im.onmouseover = function ()
{
ig(this, 256)
};
//マウスが離れると戻す im.onmouseout = function ()
{
ig(this, 128)
}
}
})();
そしてこれがjavascript:スキーム形式にしたもの

もっと短く出来るはず…

JavaScriptでArray関数は使わないほうがいい

コードをいじっていて気がついたのだが

a = Array(3);
a = [3];
この2つのコードは等価ではない、実行すると下のようになる
[undefined, undefined, undefined]
[3]
しかしこのような場合等価になるようだ
a = Array(true); // [true]
a = [true]; // [true]
a = Array(3,3); // [3,3]
a = [3,3]; // [3,3]
Arrayに引数が1つでかつそれが数値ならその数だけ配列を作りそれ以外なら[〜]で配列を作る時と同じ動作ーかと思ったがどうやら違うようだ、下記のコードだとエラーが発生する
a = Array(1.23); // RangeError: invalid array length
しかし値を2つ与えた場合はエラーは起こらない
a = Array(1.23,1.23); // [1.23,1.23]

Array()がソースコードに紛れていると思わぬ結果が帰ってくるかもしれないので使わないほうが無難なようだ