CreamMonkey
Safari用のGreaseMonkey - Creammonkey:phpspot開発日誌。
おおすごい。さっそくインストール。
でもって、Google x はてブを使おうとしけれど、使えない。
で、ごにょごにょいじくってみる。
- const宣言があった。たぶんFirefox独自の機能だろう。varに変更
- document.evaluateでXPathを使ってる。SVN trunkでは実装されているらしいけれど、とりあえず使えないらしい。getElementsByTagNameなどを使って書き換え
- XMLリクエストがうまくいかない。(dataを無視してる)。ソースを修正。(あとで、要点をまとめてTBを打つ)
いちおう、修正版G+?Bをば。
// ==UserScript== // @name G+?B // @namespace http://ukgk.g.hatena.ne.jp/faerie/ // @description show ?B count in Google search result(for Safari) // @include http://*.google.*/*q=* // ==/UserScript== (function() { function setBookmarkCount(link, count) { var a = document.createElement("a"); a.setAttribute("href", "http://b.hatena.ne.jp/entry/"+link.href); a.appendChild(document.createTextNode(""+count+" user"+(count>1?"s":""))); with (a.style) { fontSize = "0.9em"; textDecoration = "none"; if (count >= 5) { fontWeight = "bold"; backgroundColor = "#fff0f0"; color = "#f66"; } if (count >= 10) { backgroundColor = "#ffcccc"; color = "red"; } } link.parentNode.insertBefore(a, link.nextSibling); link.parentNode.insertBefore(document.createTextNode(" "), link.nextSibling); } function callXmlrpc(requestbody, url2link) { var endpoint = "http://b.hatena.ne.jp/xmlrpc"; // const から変更 function onload(response) { var pattern = /<name>([^<]+)<\/name>\s*<value><int>(\d+)/g; var m; while (m = pattern.exec(response.responseText)) { var link = url2link[m[1]]; if (link && m[2] > 0) setBookmarkCount(link, m[2]); } } GM_xmlhttpRequest({method: "POST", url: endpoint, data: requestbody, onload: onload}); } var links = document.getElementsByTagName('a'); if (!links.length) return; var request = '<?xml version="1.0"?>\n<methodCall>\n'; request += <methodName>bookmark.getCount</methodName>\n<params>\n'; var url2link = new Array(links.length); String.prototype.htmlescape = function() { return this.replace(/&/, "&").replace(/</g, "<"); } for (var i = 0; i < links.length; ++i) { var link = links[i]; // XPathがつかえないので、ここでフィルタする if(link.className == 'l'){ request += "<param><value><string>"+link.href.htmlescape()+"</string></value></param>\n"; url2link[link.href] = link; } } request += "</params>\n</methodCall>\n"; callXmlrpc(request, url2link); })();
# うお、12時間前にリリースされたばかりだったのか