GM_xmlhttpRequestのresponseTextをDOMとして扱ってみるテスト

書籍詳細ページのテーブル内の特定のTDだけ持ってきたいときに、ただのテキストデータだとかなりトリッキーなことをしなければならないので面倒だなと思いつつ思っただけで放置していたが、思い出したので調査
ざっくり検索して、quaaさんの[id:quaa:20060824#p1]を参考にしてテストしたが、shift-jisなデータが文字化けしxmlの中で文字コードを宣言しても変わらず。
更に調査して、nazokingさんの[id:nazoking:20050913:1126549126]にたどり着く、うーんGreasemonkeyに手を入れるのか…とは思いつつ修整し見事成功

  • 所蔵図書館のテーブルを差し込むのに
〜 略 〜
var sdid = result[0].match(/[0-9]+/);
var xsl = (new DOMParser()).parseFromString([
        '<?xml version="1.0" encoding="shift-jis"?>',
        '<stylesheet version="1.0" xmlns="http://www.w3.org/1999/XSL/Transform">',
        '<output method="html"/>',
        '</stylesheet>'
    ].join("\n"), "text/xml");
GM_xmlhttpRequest({
    method : "GET",
    overrideMimeType:"text/plain; charset=Shift_JIS",
    url : TARGET_URL_3 + sdid + TARGET_URL_4 + 1,
    onload : function (req) {
        var range = htmldoc.createRange();
        htmldoc.appendChild(htmldoc.createElement("html"));
        range.selectNodeContents(htmldoc.documentElement);
        htmldoc.documentElement.appendChild(range.createContextualFragment(req.responseText));
        tbl = htmldoc.getElementsByTagName('table')[2];
        var spl_link = document.createElement('p');
        spl_link.innerHTML = (new XMLSerializer()).serializeToString(tbl);
        parent.parentNode.insertBefore(spl_link, parent.nextSibling);
        }
});
〜 略 〜

と書くとこんな感じに

xmlhttprequester.jsを書き換えるなら使えるなぁ