我有那个剧本:
// ==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更改页面时运行此命令。我怎么能这样做?
另外请举例说明你的答案。我是新手我不知道如何在你的答案中使用东西。
答案 0 :(得分:3)
由于浏览器的环境是事件驱动的,因此您必须设置一个计时器,绑定到您要查找的更新周围发生的某些事件。或者,您可以包装更新的函数并在后挂钩中调用您的代码。显然,您需要将用户脚本代码包装在某个函数中以便重用。
以下是使用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
答案 1 :(得分:0)
每次更改html时,您都可以使用mutation event handler来触发您的功能。但是,browsersupport并不是最好的;)
答案 2 :(得分:0)
如果你的主机使用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();
});
};