【问题标题】:Make javascript execute on Amazon after hitting "Next Page"?点击“下一页”后让javascript在亚马逊上执行?
【发布时间】:2013-07-13 01:46:33
【问题描述】:
我有一个在亚马逊结果页面上执行的 Greasemonkey 脚本。但是,由于“下一页”按钮动态更新结果,脚本只在页面第一次加载时执行,而在点击“下一页”按钮后不再执行。
例如,如果我转到像 this one 这样的亚马逊页面,并且我的脚本运行以处理结果,那么当我单击页面底部的“下一页”时,脚本不再运行,因为结果是动态更新的。
当用户单击“上一页”或“下一页”链接时加载新结果集时,如何使我的脚本应用于新结果集?
【问题讨论】:
标签:
javascript
ajax
amazon
greasemonkey
【解决方案1】:
Amazon 使用 AJAX 更改结果,并且不会触发 hashchange 事件,甚至不会更改标题。
没关系;对于这种事情,请使用the waitForKeyElements() utility。
例如,下面是一个交替结果颜色的简单脚本:
// ==UserScript==
// @name _Amazon: Stripe Search Results
// @include http://www.amazon.com/s/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js
// @require https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
waitForKeyElements ("#searchTemplate div.results div.result", stripeAlternateRows);
function stripeAlternateRows (jNode) {
var rezRow = jNode.attr ("id").replace (/result_/, "");
rezRow = parseInt (rezRow, 10) || 0;
if (rezRow % 2) {
//-- Color every odd row.
jNode.css ("background", "#EEFFEE");
}
}
参考: