addRequestFilterを使ってリンクがJavaScriptなサイトでもAutoPagerizeを有効にする

具体例としてキッコーマンのレシピ検索のサイトを使って説明


// ==UserScript==
// @name AutoPagerize Kikkoman Homecook Filter
// @namespace http://d.hatena.ne.jp/kiyo_hoge/
// @include http://www.kikkoman.co.jp/homecook/search/select_search.php?*
// ==/UserScript==

(function() {
var siteinfo = [{
url: '^http://www\\.kikkoman\\.co\\.jp/homecook/search/select_search\\.php\\?',
nextLink: 'id("content")/form[@name="form_list"]/div[@class="search-pager-container"]/ul/li[./span]/following-sibling::li[1]/a',
pageElement: 'id("content")/form[@name="form_list"]/*[./self::ul[@class="search-block-result-a-1"] or ./self::div[@class="search-block-result-b-1-container"]]'
}]

var requestFilter = (function() {
var o = {};
var options = document.evaluate('//form[@name="result"]/input[@name and @value]', document, null, 7, null);
for (var i = 0, op; (op = options.snapshotItem(i)); i++) {
o[op.name] = op.value;
}

return function(opt) {
var regHref = /^javascript:goto_page\('(\d+)','(\d+)','(\d+)','(\d+)'\)$/i;
if (!regHref.test(opt.url)) {
return;
}
o.page = RegExp.$1;
o.sortmode = RegExp.$2;
o.sortdesc = RegExp.$3;
o.lstmode = RegExp.$4;
var query = [];
for (field in o) {
query.push(field + '=' + encodeURIComponent(o[field]));
}
opt.url = 'http://www.kikkoman.co.jp/homecook/search/select_search.php?' + query.join('&');
}
})();

setTimeout(function() {
if (window.AutoPagerize && window.AutoPagerize.addRequestFilter && window.AutoPagerize.launchAutoPager) {
window.AutoPagerize.addRequestFilter(requestFilter);
window.AutoPagerize.launchAutoPager(siteinfo);
}
}, 0);
})();

重要なところはrequestFilterでGM_xmlhttpRequestのオプションのurlを
javascript:……」で表されるものからURLに置き換えているところ。
具体的にどのようにURLを求めるかは対象とするリンクのJavaScriptの内容を
理解して求めなる必要がある。


addRequestFilterを実行した後はlaunchAutoPagerでsitoinfoをAutoPagerize
追加させて実行できるようにすればいい。


あとなぜかこのフィルタはGoogle Chrome版のAutoPagerizeでは動かなかった。

if (window.AutoPagerize) {
alert(typeof window.AutoPagerize)
} else {
window.addEventListener('GM_AutoPagerizeLoaded', function() { alert(typeof window.AutoPagerize) }, false);
}
としてもGoogle Chrome版のAutoPagerizeは何の反応もしないので、
Google Chrome版のAutoPagerizeAPIが使えないのかもしれない
(以前addDocumentFilterを使ったときは使えた気がするのだが)。