HideMyAnswer で隠された回答を見るユーザスクリプト 1.1
Hide My Answer (question:1331264191 や question:1331284462 などで使われているサービス) の回答を、今メインで使っているブラウザでさっくり見たかったのですが、Firefox 用のアドオンなどはまだ開発されていないみたいなので、自分でちまちまユーザスクリプトを書きました。
// ==UserScript== // @id ShowOurAnswer // @name ShowOurAnswer // @version 1.1 // @namespace id:pacochi // @author pacochi // @description HideMyAnswer を見るだけ // @include http://q.hatena.ne.jp/* // @run-at document-end // ==/UserScript== (function() { if (!document.URL.match(/q\.hatena\.ne\.jp\/\d+(#|$)/)) return; var url = 'http://hidemyans.appspot.com/getAnswer'; var req = function(id) { GM_xmlhttpRequest({ method: 'POST', headers: { 'Content-type': 'application/x-www-form-urlencoded' }, url: url, data: 'hidemyansid=' + id, onload: function(res) { var txt = document.createElement('span'); txt.style.cssText = 'display:block; padding:1em; border:1px solid #F6AC5A;'; /* みんな適度に改行するタイプならこれでもいいと思う txt.style.cssText = 'display:block; padding:1em; border:1px solid #F6AC5A; white-space:pre;'; txt.appendChild(document.createTextNode(res.responseText)); */ var lines = res.responseText.split('\n'); for (var i = 0; i < lines.length; i++) { if (i > 0) txt.appendChild(document.createElement('br')); txt.appendChild(document.createTextNode(lines[i])); } hma[id].ap.parentNode.insertBefore(txt, hma[id].ap); } }); }; var ans = document.evaluate("//div[@class='section clearfix' and starts-with(@id, 'answer-formatted-body-')]/p/text()", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var hma = {}; for (var i = 0; i < ans.snapshotLength; i++) { var ap = ans.snapshotItem(i); // Node.TEXT_NODE って書いたら undefined になった if(ap.nodeType == 3 && ap.nodeValue.match(/HideMyAnswer:(\d{13})/)) { var id = RegExp.$1; // 数日前まで書かれてた「reply_content」が質問によっては消えてたのを確認 (20120316) //var name = document.evaluate("ancestor::div[@class='answer reply_content']/h3/span[@class='timestamp']/a/@name", var name = document.evaluate("ancestor::div[@class='answer' or @class='answer reply_content']/h3/span[@class='timestamp']/a/@name", ap, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; var aid = parseInt(name.nodeValue.substr(1), 10); // 早く回答した方だけ変換 if (typeof(hma[id]) == 'undefined' || hma[id].aid > aid) hma[id] = { aid: aid, ap: ap }; } } for (var id in hma) req(id); })();
Scriptish でしか確認してないので、他のやつだと動かないかもしれません。
以下追記です。
回答周辺のクラス名が変更されていたので修正しました。
回答欄の他に、回答コメント欄と質問コメント欄も変換する版 (ver 1.2)を書きました。