jQueryでブックマークレットを書く 3

投稿日: 作成者: ethertank

上記の続き。質問時に上げたコードが既に、IEで動いてなかった・・・・。
.appendChild() で追加したスクリプトの onload イベントが取れてない(?)みたいなので、.setTimeout()を用いる形にしたら IE でも動いた。

javascript:(function(d, j, b) {

    function r() {
        setTimeout(function() {
            (typeof jQuery == 'undefined') ? r() : b(jQuery);
        }, 99);
    }

    if (j) b(jQuery);
    else {
        var s = d.createElement('script');
        s.src = '//p.tl/Q9Fz';
        d.body.appendChild(s);
        r();
    }

})(document, this.jQuery, function($) {
    $('*').css({'background':'#000','color':'ghostwhite'});
});

上記は全ての要素の背景と文字色を変えるコード。IE対応と、更に匿名関数の引数に関数ごと突っ込む部分と最初の分岐の所とURLの短縮部分を真似させていただいた。一応スニペットも貼っておく。

javascript:(function(d,j,b){function r(){setTimeout(function(){(typeof jQuery=='undefined')?r():b(jQuery)},99)}if(j){b(jQuery)}else{var s=d.createElement('script');s.src='//p.tl/Q9Fz';d.body.appendChild(s);r()}})(document,this.jQuery,function($){
/*任意のjQueryコード*/
});

まだ磨けると思うんだけど、今にも脳内メモリ(256M)が吹き飛びそうな感じなので(笑)、取り敢えず忘れないようにメモ。もっとカッコいいコードにする予定。b(jQuery)って二回書いてるところとかがもったいない気がするんだけど、上手くいかない。IEの為に他のブラウザの動作にまで影響が出る感じなのも気に食わないけど、ここらは仕方ないかな。普通にサイト上で使うコードだったら振り分けるだろうけど。

※アップデート。大きな変更は無し。ちょっと縮んだ。コメントを除き237233byte。

javascript:(function(d,j,b,s){function r(){setTimeout(function(){(typeof jQuery=='undefined')?r():b(jQuery)},99)}(j)?b(jQuery):d.body.appendChild(d.createElement('script')).src='//p.tl/Q9Fz',r()})(document,this.jQuery,function($){
/*任意のjQueryコード*/
});

全コード一部修正(※「$」から「j」へ)。スニペットのURLエンコード解除。

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt="">

Spam Protection by WP-SpamFree