Greasemonkey版とSeahorse版のスクリプトを一本化してみた
GM_xmlhttpRequestを使用していないバージョンなら、どうにかして一本化できるのではないか?と気にはなってたが、ようやく本腰をいれたら以外に簡単にロジックが完成しました
もちろんリンクの差込位置をSeahorse版にあわせるのはレベルダウンなのでGreasemonkey版から位置の変更はなしです
- 現行ロジック
var header = document.evaluate("//b[@class='sans']", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 〜 略 〜 parent.parentNode.insertBefore(spl_link, parent.nextSibling);
var header = document.getElementById("primaryUsedAndNew"); 〜 略 〜 header.parentNode.insertBefore(spl_link, header.previousSibling);
Greasemonkey版はdocument.evaluateを使用して書名のノードを特定出来るので書名の後にリンクを差し込めるが、Seahorse版は使用できない為に付近のid(primaryUsedAndNew)の前に差し込むしかない
どうにかclassを指定する方法がないかと、ググりhttp://getelementsby.com/でYour Favourite getElementsByClassName - Snook.caを発見したので試してみる
とりあえず、クラス名がsansなのは1箇所しかないため、アッサリ記述できた
- 新ロジック
header = getElementsByClassName(document.body,'sans')[0]; 〜 略 〜 function getElementsByClassName(node, classname) { var a = []; var re = new RegExp('\\b' + classname + '\\b'); var els = node.getElementsByTagName("*"); for(var i=0,j=els.length; i<j; i++) if(re.test(els[i].className))a.push(els[i]); return a; }
スクリプトの個数が少ないほうが何かと楽なので、週末ぐらいから徐々に統合した1.4系をリリースする予定です(バージョンナンバーも見直します)