素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: すかいぷ:javascripter_  か javascripter あっと tsukkun.net skypeのほうがいいです

はてなダイアリーに貼ってあるGreasemonkeyスクリプトにマッチするXPath

document.evaluate('//pre[@class="syntax-highlight" and span[@class="synComment" and contains(text(),"==UserScript==")]]',document,null,7,null);

な感じ。


2007-06-21 - いぬビームを元に、上記のXPathを使ったりちょっと改造したけど、AutoPagerizeがうまくいかなくてひとつのスクリプトに複数のボタンがついちゃったりします。もったいないのでとりあえず貼っておく。

追記:os0xさんが、相対リンクにすればいいと教えてくれたのでXPathを.//pre[@class="syntax-highlight" and span[@class="synComment" and contains(text(),"==UserScript==")]]にしたら動きました。下のスクリプトはAutoPagerizeでもうまくうごきます。

// ==UserScript==
// @name           pasted script installer2
// @namespace      http://d.hatena.ne.jp/javascripter/
// @include        http://*.g.hatena.ne.jp/*
// @include        http://d.hatena.ne.jp/*
// @include        http://anond.hatelabo.jp/*
// ==/UserScript==

//元のスクリプトはhttp://d.hatena.ne.jp/kusigahama/20070621#1182358220です。
var f = function(docs){
	docs.forEach(function(doc){
    var a=document.evaluate('.//pre[@class="syntax-highlight" and span[@class="synComment" and contains(text(),"==UserScript==")]]',doc,null,7,null);
    for(var i=0;i<a.snapshotLength;i++){
    var s=a.snapshotItem(i);
    var div = document.createElement('div');
    div.style.marginBottom = "1em";
    var l = document.createElement('a');
    l.href = "data:text/html;charset=utf-8," + encodeURIComponent(s) + "//.user.js";
    l.setAttribute("style", "border: 1px solid #666; text-decoration:none; padding: 3px 6px;font-family: Arial; font-size: 10px; background: white; color: black;");
    l.setAttribute("onmousedown", "this.firstChild.style.left = '1px'; this.firstChild.style.top = '1px'");
    l.setAttribute("onmouseup", "this.firstChild.style.left = '0px'; this.firstChild.style.top = '0px'");
    l.innerHTML =
      '<span style="position: relative; left: 0px; top: 0px;">' +
      //'<img src="data:image/gif," width=10 height=8> ' +
      '<span style="font-size: 1.3em; padding-right: 5px; color: #2c2;">&raquo;</span>' +
      '<span style="font-weight: bold;">Install this script</span></span>';
    div.appendChild(l);
    s.insertBefore(div, s.firstChild);
    }
});
}
f([document]);
if (window.AutoPagerize) window.AutoPagerize.addFilter(f);