I have that script:
JavaScript
x
37
37
1
// ==UserScript==
2
// @name example
3
// @include http://xxx*
4
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
5
// ==/UserScript==
6
7
var findElem = function(elems, text) {
8
for (var i = 0; i < elems.length; i++) {
9
if (elems[i].textContent == text) {
10
return elems[i];
11
} else {
12
var result = findElem(elems[i].children, text);
13
if (result != undefined) {
14
return result;
15
}
16
}
17
}
18
return;
19
}
20
21
switch (document.getElementById('my_id').value) {
22
case "1":
23
findElem(document.documentElement.children, "blabla1").click();
24
break;
25
case "2":
26
findElem(document.documentElement.children, "blabla2").click();
27
break;
28
case "3":
29
findElem(document.documentElement.children, "blabla3").click();
30
break;
31
case "4":
32
findElem(document.documentElement.children, "blabla4").click();
33
break;
34
default:
35
break;
36
}
37
It works fine but it works only main page load. I want to run this when page changed via ajax. How can I do that?
Also please give examples with your answers. I’m newbie. I don’t know how to use things in your answers.
Advertisement
Answer
Since browser’s environment is event-driven you’ll have to either set up a timer, bind to some event that happens around update you looking for. Alternatively, you can wrap function that does update and call your code in post-hook. Obviously, you’ll need to wrap your userscript code in some function to reuse.
Here’s an example with timer set up with setInterval
(top of script is still the same):
JavaScript
1
19
19
1
setInterval(function(){
2
switch (document.getElementById('my_id').value) {
3
case "1":
4
findElem(document.documentElement.children, "blabla1").click();
5
break;
6
case "2":
7
findElem(document.documentElement.children, "blabla2").click();
8
break;
9
case "3":
10
findElem(document.documentElement.children, "blabla3").click();
11
break;
12
case "4":
13
findElem(document.documentElement.children, "blabla4").click();
14
break;
15
default:
16
break;
17
}
18
}, 1000) // if AJAX updates happen with some specific interval, set same number here to minimize useless work
19