Hatena::ブログ(Diary)

sawatの日記 RSSフィード

2006-10-17 (火)

[]はてダ内ブックマークレット有効化Greasemonkey 22:09 はてダ内ブックマークレット有効化Greasemonkeyを含むブックマーク

それすぐ実行!JavaScript! - IT戦記を見ながら、ブックマークレットが貼れないはてなダイアリーは不便だと思いました。*1

そこで、Greasemonkey

動作

中身が"javascript:"で始まるpreタグをdocument内から探して、内容をAタグで囲んでブックマークレット化させます。
同じくamachang氏作のHDJSExecuterブックマークレット版です。
Greasemonkeyのみじゃなく、Trixieでも動作します。OperaのUser JavaScriptでも多分いけます。

こいつをインストール

http://sawat.jf.land.to/gm/hd_bookmarklet_activator.user.js

ソースは以下の通り

// ==UserScript==
// @name        Hatena Diary Bookmarket Activator.
// @description Replace Bookmarklet written in the PRE tag on Hatena Diary to executable A tag. 
// @namespace   http://d.hatena.ne.jp/sawat/
// @include     http://d.hatena.ne.jp/*
// @include     http://*.g.hatena.ne.jp/*
// ==/UserScript==

(function() {
 var reg = /^\s*javascript\:/i;
 var pres = document.getElementsByTagName('pre');
 for(var i=0,n=pres.length;i<n;i++) {
  var e  = pres[i];
  var js = e.innerHTML.replace(/<\/?[^>]+>|\n/gi,'');
  if (js.match(reg)) {
   var a = document.createElement('a');
   a.innerHTML = js;
   a.href = a.childNodes[0].nodeValue;
   a.innerHTML = e.innerHTML;
   e.innerHTML = '';
   e.appendChild(a);
  }
 };
})();

サンプル

これ自身をブックマークレット化してみる。

javascript:(function() {
 var reg = /^\s*javascript\:/i;
 var pres = document.getElementsByTagName('pre');
 for(var i=0,n=pres.length;i<n;i++) {
  var e  = pres[i];
  var js = e.innerHTML.replace(/<\/?[^>]+>|\n/gi,'');
  if (js.match(reg)) {
   var a = document.createElement('a');
   a.innerHTML = js;
   a.href = a.childNodes[0].nodeValue;
   a.innerHTML = e.innerHTML;
   e.innerHTML = '';
   e.appendChild(a);
  }
 };
})();

改行を取り除くので、頭にjavascript: つけただけでもOK。*2
タグも取り除くので、はてなグループのハイライト付きスーパーpre記法でもOKなはず。(試してません)

*1:セキュリティのためなので仕方がない。はてなダイアリーが個々のダイアリーをサブドメイン化しないと解決はできないでしょう。

*2:一行コメントがあったり、セミコロンの省略があった場合は無理なので注意。

amachangamachang 2006/10/17 23:32 これいいですね!さっそくインストールしてみましたが。やっぱりいいですね!

sawatsawat 2006/10/17 23:53 ありがとうございます。HDJSExecuterを参考にさせてもらいました。

Connection: close