スペースアルク 検索結果の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); }