Лучший способ запустить рабочую Javascript Onload после задержки - PullRequest
0 голосов
/ 06 марта 2011

Я пытаюсь создать скрипт greasemonkey, который будет запускать следующий код. Я проверил это, и он определенно работает через URL (javascript: бла-бла;) минус комментарий, конечно:

// Your country code
var cc = 'net';

var j = document.getElementsByTagName('td');
for (i=0; i <= j.length; i++) {
    if (j[[i]].innerHTML.indexOf('points - punishment #A') > 0 && j[[i]].innerHTML.length == 30) {
        var k = j[[i]].innerHTML;
        j[[i]].innerHTML = k.slice(0, 23) + '<a href="http://www.example.' + cc + '/admin.php?screen=affront_tool&mode=view_punishment&punishment_id=' + k.slice(25) + '">' + k.slice(23) + '</a>';
    }
    else if (j[[i]].innerHTML.indexOf('points - punishment #A') > 0 && j[[i]].innerHTML.length == 29) {
        var k = j[[i]].innerHTML;
        j[[i]].innerHTML = k.slice(0, 22) + '<a href="http://www.example.' + cc + '/admin.php?screen=affront_tool&mode=view_punishment&punishment_id=' + k.slice(24) + '">' + k.slice(22) + '</a>';
    }
    else if (j[[i]].innerHTML.indexOf('points - punishment') > 0 && j[[i]].innerHTML.length <= 67) {
        var k = j[[i]].getElementsByTagName('a')[0];
        var l = 'http://www.example.' + cc + '/admin.php?screen=affront_tool&mode=view_punishment&punishment_id=' + k.getAttribute('href').slice(19);
        k.setAttribute('href', l);
    }
}

К сожалению, этот скрипт работает с элементом страницы, который динамически генерируется до десяти секунд после загрузки (ожидайте около трех), что усложняет задачу. Я пробовал многочисленные способы прикрепления скрипта в качестве атрибута «onload» к телу с setTimeout в десять тысяч мс, но безрезультатно. Возможно, мне следует попробовать другой метод, или я повторил простую ошибку в процессе? Может ли кто-нибудь показать мне, как они это сделают?

1 Ответ

2 голосов
/ 06 марта 2011

Я бы включил библиотеку jquery на вашу страницу и превратил ваш код в функцию, затем выполните:

$(document).ready(function () {
           setTimeout('myFunction();', 10000);
        });

В этом случае имя функции - "myFunction ()"

...