// ==UserScript== // @name Hatena Seemore seemore // @description Kill seemore, I love netabare // @namespace http://lowreal.net/ // @include http://d.hatena.ne.jp/* // @include http://*.g.hatena.ne.jp/* // ==/UserScript== (function () { $X("//p[@class='seemore']").forEach(function (p) { var url = $X(".//a", p)[0].href; GM_xmlhttpRequest({ method : "GET", url : url, headers : { }, onload : function (req) { var d = document.createElement("div"); d.innerHTML = req.responseText; $X(".//a[@name='seemore']/following-sibling::*[not(@class='sectionfooter')]", d).forEach(function (e) { p.appendChild(e); }); }, onerror : function (req) { alert(req.responseText); } }); }); /* template functions */ function $X(exp, context) { if (!context) context = document; var resolver = function (prefix) { return document.createNSResolver((context.ownerDocument == null ? context : context.ownerDocument).documentElement) .lookupNamespaceURI(prefix) || document.documentElement.namespaceURI; } exp = (context.ownerDocument || context).createExpression(exp, resolver); var result = exp.evaluate(context, XPathResult.ANY_TYPE, null); switch (result.resultType) { case XPathResult.STRING_TYPE : return result.stringValue; case XPathResult.NUMBER_TYPE : return result.numberValue; case XPathResult.BOOLEAN_TYPE: return result.booleanValue; case XPathResult.UNORDERED_NODE_ITERATOR_TYPE: { result = exp.evaluate(context, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var ret = []; for (var i = 0, len = result.snapshotLength; i < len; ret.push(result.snapshotItem(i++))); return ret; } } return null; } })();