Hatena Asin Info アップデート
はてなのASINページがリニューアルして使えなくなっていたGreasemonkeyスクリプトをアップデートした。おまけで広告を削除する機能も付けてみたけど、これはスタイルシートで非表示にしてるだけなので、それ専用の方法(Stylish Extension等)を使った方がいいかも。
// ==UserScript== // @name Hatena Asin Info // @namespace http://d.hatena.ne.jp/nozom/ // @include http://d.hatena.ne.jp/asin/* // ==/UserScript== (function(){ function div(s) { var d = document.createElement('div'); with (d.style) { border = '1px solid #5279E7'; margin = '10 5% 10 5%'; padding = '2'; } d.appendChild(s); return d; } function textfield(value) { var node = document.createElement('input'); node.type = 'text'; node.size = 150; node.value = value; node.style.border = 'none'; node.addEventListener('focus', function(e) { node.select(); }, true); return node; } function killAds() { var nodes = document.getElementsByTagName('div'); for (var i = 0; i < nodes.length; i++) { if (nodes[i].className == 'ad-banner') { nodes[i].style.display = 'none'; } } } if (window.location.href.match(/\/asin\/([^\/]+)/)) { var asin = RegExp.$1; var h1 = document.getElementsByTagName('h1')[0]; var title = (h1 == undefined) ? '' : h1.textContent; var forms = document.forms; var dl; for (var i = 0; i < forms.length; i++) { dl = forms[i].getElementsByTagName('dl')[0]; if (dl != undefined) break; } if (dl != undefined) { var asin_prefix = 'ASIN:'; var authors = []; var dt; var nodes = dl.childNodes; for (var i = 0; i < nodes.length; i++) { var node = nodes[i]; if (node.tagName == 'DT') { dt = node; } else if ((dt != undefined) && (node.tagName == 'DD')) { var dd = node; if ((dt.textContent == '作者:') || (dt.textContent == 'アーティスト:')) { authors.push(dd.textContent); } else if (dt.textContent == 'はてな記法:') { var input = dd.getElementsByTagName('input')[0]; if ((input != undefined) && (input.value.match(/^isbn:/i))) { asin_prefix = 'ISBN:'; } } } } var authors_sep = (authors.length > 0) ? ' / ' + authors.join(', ') + ' ' : ' '; var d = div(textfield(title + authors_sep + asin_prefix + asin)); forms[0].parentNode.appendChild(d); } killAds(); } })();