Unformed Building

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

公開:
更新:

パーマリンク

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

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

2011年1月26日 追記:
"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とかでどうにかしたほうがいいかもしれません。


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