我有这个脚本:
// ==UserScript==
// @name example
// @include http://xxx*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// ==/UserScript==
var findElem = function(elems, text) {
for (var i = 0; i < elems.length; i++) {
if (elems[i].textContent == text) {
return elems[i];
} else {
var result = findElem(elems[i].children, text);
if (result != undefined) {
return result;
}
}
}
return;
}
switch (document.getElementById('my_id').value) {
case "1":
findElem(document.documentElement.children, "blabla1").click();
break;
case "2":
findElem(document.documentElement.children, "blabla2").click();
break;
case "3":
findElem(document.documentElement.children, "blabla3").click();
break;
case "4":
findElem(document.documentElement.children, "blabla4").click();
break;
default:
break;
}它工作得很好,但它只适用于主页加载。我想在页面通过ajax改变的时候运行这个。我该怎么做呢?
另外,请举例说明你的答案。我是新手。我不知道如何在你的答案中使用这些东西。
发布于 2012-06-14 23:39:52
由于浏览器的环境是事件驱动的,你必须设置一个计时器,绑定到你正在寻找的更新周围发生的一些事件。或者,您可以包装函数,该函数在post-hook中更新和调用代码。显然,您需要将用户脚本代码包装在某个函数中以便重用。
下面是一个使用setInterval设置计时器的示例(脚本的顶部仍然是一样的):
setInterval(function(){
switch (document.getElementById('my_id').value) {
case "1":
findElem(document.documentElement.children, "blabla1").click();
break;
case "2":
findElem(document.documentElement.children, "blabla2").click();
break;
case "3":
findElem(document.documentElement.children, "blabla3").click();
break;
case "4":
findElem(document.documentElement.children, "blabla4").click();
break;
default:
break;
}
}, 1000) // if AJAX updates happen with some specific interval, set same number here to minimize useless work发布于 2012-06-14 23:43:47
您可以使用mutation event handler在每次更改html时触发您的函数。然而,浏览器支持并不是最好的;)
发布于 2012-06-15 21:19:52
如果您的主机使用jQuery,则可以使用ajaxSuccess或ajaxComplete
function mainCode(){
// your script logic here ...
switch (document.getElementById('my_id').value) {
// truncated to save space
}
}
$(document).ready(function(){
mainCode();
unsafeWindow.$(document).ajaxSuccess(function(e, xhr, opt) {
mainCode();
});
};https://stackoverflow.com/questions/11036542
复制相似问题