Category gm.

GreaseMonkey では GM_xmlhttpRequest で他のページとってくるじゃないですか。で、onload して req.responseXML をとるなり req.responseText をとるなりするけど、どうにもこうにも not well-formed なページ (HTML とか) をとってきてノード検索するとき面倒くさいんですよ。responseXML はもちろん空だし、responseText はもちろんただのテキストだし。

で、なんとなく思いついたので以下のように解決するようにした。

GM_xmlhttpRequest({
method : "GET",
url : i.href,
onload : function (req) {
// てきとーなエレメント作って突っ込む (ブラウザにパースさせる)
var d = document.createElement("div");
d.innerHTML = req.responseText;
// d を最初のコンテキストノードにして文書を XPath 検索
$X(".//foobar", d);
},
onerror : function (req) {
alert(req.responseText);
}
});

なんてキモイ!

問題点は application/xhtml+xml なページから not well-formed なページをとってくるっていう場合は使えないこと。なぜなら innerHTML が使えないから。でも殆どの場合 (というか殆どのページは) text/html なので問題ない感じ。はてなとかはてなとかはてなとか。

Firefox 1.5 からは application/xhtml+xml なページでも innerHTML 使えるみたいです。by yoko さん

  1. トップ
  2. js
  3. ふぁっきん not well-formed, XMLHttpRequest とかで
  1. トップ
  2. gm
  3. ふぁっきん not well-formed, XMLHttpRequest とかで

hatena-bk-neglect-comment-by-id.user.js

指定ユーザのコメントを消します。デフォルトでは「ブックマークしている」ことは薄く見えるようにしてあります。ERASE_FROM_THE_WORLDtrue にするとブックマークしている事実も消します (ブックマーク数は変えません)。

  1. トップ
  2. gm
  3. はてブ。見たくないユーザのコメントを消す GM
  1. トップ
  2. js
  3. はてブ。見たくないユーザのコメントを消す GM

hatena-highlight-fragment.user.js

ハッシュつきアクセスの場合該当セクションをハイライトさせる GreaseMonkey。日記モードでしか意味がないっぽい。フィードリーダーで読んでるからあんまり意味ないけど。#1149956303 とかついてる場合そのセクションをハイライトする。クリックで解除


もともとはどこでも使えるようなスクリプトの予定だったけど、ちゃんと構造化されて id をふっているサイトがあまりにもなかった (id をふってる要素以下だけハイライトさせると悲惨になることが多い) 。なんか意味がなかった (というか弊害のほうが大きかった) ので、割と解りにくいなぁと思うはてダに特化させた。

はてダの場合 id じゃなくて a @name だから、フラグメントとは言わないかな?

  1. トップ
  2. gm
  3. はてダ。フラグメントハイライト
  1. トップ
  2. js
  3. はてダ。フラグメントハイライト