2

私はそのスクリプトを持っています:

// ==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でページが変更されたときにこれを実行したいと思います。どうやってやるの?

また、あなたの答えとともに例を挙げてください。私は初心者です。私はあなたの答えに物事を使う方法がわかりません。

4

3 に答える 3

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
于 2012-06-14T15:39:52.317 に答える
1

ホストが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();
    });
});
于 2012-06-15T13:19:51.697 に答える
0

ミューテーションイベントハンドラーを使用して、htmlが変更されるたびに関数をトリガーできます。ただし、browsersupportは最適ではありません;)

于 2012-06-14T15:43:46.817 に答える