Tumblr Lifeが動かなかった話
http://userscripts.org/scripts/show/59330という素晴らしいユーザースクリプトがあるんですが,何故か私の環境(Firefox 3.6.8 with Greasemonkey 0.8.20100408.6)では動かなかったので,動かない原因を探して動くようにしてみました。ひょっとしたら同じ現象に悩んでいる人がいるかも知れないのでメモとして残しておきます。ちなみに,このtipsの対象はTumblr Lifeのバージョン0.4.5です。
まず,tumblr_life.user.js(Greasemonkeyの管理画面から「編集」ボタンを押すと編集できます)の442〜456行目にある以下のメソッドを次のように書き換えます。
書き換え前:
filter: function(param) { switch (param.name) { case 'preview_post': return false; case 'post[tags]': param.value = $X('.//input[@class="tumblr-life-tags"]', this.itemlist)[0].value; return true; case 'send_to_twitter': var value = $X('.//input[@class="tumblr-life-twitter"]', this.itemlist)[0].checked; return (value) ? !!(param.value = '1') : false; case 'custom_tweet': var checked = $X('.//input[@class="tumblr-life-twitter"]', this.itemlist)[0].checked; return (checked) ? !!(param.value = this.custom_tweet) : false; default: return true; } },
書き換え後:
filter: function(param) { switch (param.name) { case 'preview_post': return false; case 'post[tags]': param.value = $X('.//input[@class="tumblr-life-tags"]', this.itemlist)[0].value; return true; case 'send_to_twitter': var item = $X('.//input[@class="tumblr-life-twitter"]', this.itemlist)[0]; return (item && item.checked) ? !!(param.value = '1') : false; case 'custom_tweet': var item = $X('.//input[@class="tumblr-life-twitter"]', this.itemlist)[0]; return (item && item.checked) ? !!(param.value = this.custom_tweet) : false; default: return true; } },
同様にして,同スクリプトの466〜468行目にある以下のメソッドを次のように書き換えます。
書き換え前:
twitter: function() { return ($X('//a[@class="dashboard_switch_blog_menu_item"][last()]')[0].style.backgroundImage.indexOf('twitter_favicon') != -1); },
書き換え後:
twitter: function() { var item = $X('//a[@class="dashboard_switch_blog_menu_item"][last()]')[0]; if (!item) return false; return (item.style.backgroundImage.indexOf('twitter_favicon') != -1); },
とりあえず例外が起こってるっぽい箇所を抜き出して,例外が発生してもスクリプトが動くように書き換えただけの対症療法です。私の環境では,この書き換えを行うことで'p'でピンを立ててからまとめて'r'でReblogするという動作を行えるようになりました。
追記20110126
Version.0.5b2以降ではこの問題に対応されているようです。詳しくは開発者さんのTumblrをご覧くださいませ。