Hatena::ブログ(Diary)

0xFF RSSフィード

2008 April 25th

スペースアルク 検索結果のAutoPagerizeとaddDocumentFilter(addFilterとの比較)

<

スペースアルクの検索結果はページ遷移のリンクがJavaScriptになっているため、XPathでどう頑張っても対応できないという話がAutoPagerize Wiki: siteinfo requestにあった。

それならと、AutoPagerizeにインクリメントモードとURLフィルターを追加するプラグインを書いてみた - 0xFFにアルク対応を入れてみました。

http://ss-o.net/userjs/test/autoincrementerplugin.user.js

(Minibuffer、AutoPagerize、LDRizeそれぞれの最新版との組み合わせで動作確認しています)

カスタムAutoPagerize - 0xFFをどうぞ。

今回はAutoPagerize.addDocumentFilterを使いました。

AutoPagerize.addDocumentFilterはAutoPagerize.addFilterと少し違っていて、比較してみるとこんな感じ。

filter比較実行タイミング引数用途
addDocumentFilter次のページの読み込みとhtml作成完了直後で、htmlの切り出し前であり「さらに次のページ」のURL取得前htmlDoc(GM_xmlhttpRequestで取得したソースを元に作成したDocumentオブジェクト), this.requestURL (次のページとして取得したURL), this.info (使用しているSITEINFO)nextLink、pageElementの取得の補助、SITEINFOの動的な変更など
addFilter次のページのhtmlを挿入後page(htmlDocからgetElementsByXPath(this.info.pageElement, htmlDoc)で切り出した要素の配列。要素自身だと間違われやすいがあくまで配列。)継ぎ足しした部分を他のScriptから操作したい場合など

今回の場合、addDocumentFilterをnextLink取得の補助として使いました。(M.$XはMinibufferの$X関数ですMinibufferに依存しないように修正しました)

if (location.host == 'eow.alc.co.jp' && getElementsByXPath) {
	var alc = function(doc){
		var a = getElementsByXPath('//table[@class="pageNavi"]//td[last()]/a',doc);
		if (a.length) a = a[0];
		else return;
		a.id = 'AutoPagerizeNextLink';
		a.href = a.href.replace(/javascript:goPage\("(\d+)"\)/,'./?pg=$1');
	}
	alc();
	window.AutoPagerize.addDocumentFilter(alc);
}

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

カレンダー
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
日記の検索

最近のコメント