Lunascape Gecko モードでは createElement() で JavaScript を追加してアレコレするタイプのブックマークレットは動かないことがある

Category : Lunascape

タイトル通り。
Lunascape の Gecko モードでは jQuery を追加してから色々やるタイプのブックマークレットは動かないっぽいです。

というより、createElement() でスクリプトを追加して、それを利用して何かするというタイプのものが動かないっぽい?
Evernote のブックマークレット版 Webクリッパー も動きません。
Twitter の公式シェアブックマークレットは一応動きますが、何か動きが変です。

"Lunascape Evernote Gecko" みたいなキーワードで検索して来られた方へ。
通常が Gecko モード利用なら、素直に Firefox 用アドオンを入れたほうがいいですよ。

確認のために簡単なテスト用ブックマークレットとページを用意してみました。

ブックマークレット
これをブックマークレットに登録

テスト用デモページ

ブックマークレットは以下のようなものです。

javascript: (function () {
    if (typeof jQuery == 'undefined') {
        var s = document.createElement('script');
        s.type = 'text/javascript';
        s.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js';
        document.getElementsByTagName('body')[0].appendChild(s);

        function c() {
            setTimeout(function () {
                if (typeof jQuery == 'undefined') {
                    c()
                } else {
                    b()
                }
            }, 500)
        }
        c()
    } else {
        b()
    }

    function b() {
        jQuery('body').css('background-color', 'black');
        jQuery('h1').show();
    }
})()

ちゃんと動けば背景が黒になって、白い文字で「available!!!」と表示されます。
このコードの場合、Trident, webkit で動くことを確認しました。
Gecko モードのときだけ動きません。

これに限らず、こういうタイプのブックマークレットを Gecko モードで動かすには、Lunascape Gecko の拡張モードのアドレス欄にブックマークレットのコードを直接打ち込まなければいけません。

対処法が分からないので、どうしても使いたければ自分用に Greasemonkey とかでどうにかしたほうがいいかもしれません。

createElement() で追加するスクリプトですが Firebug で確認したところ、DOM にはちゃんと追加されています。
なので、Lunascape に標準で付いてくる Gecko 用ブックマークレットのように、追加したスクリプトのみで動作が完了するタイプのブックマークレットは動くと思います。
問題なのは上記コードのように「ライブラリなどを読み込んで、それを利用して何かする」というタイプのブックマークレットですね。

Leave a Reply