Как исправить эту область JS в GM_xmlhttpRequest - PullRequest
1 голос
/ 09 июня 2010

Когда я запускаю этот код, оповещение 2 показывает 6 разных ссылок href. предупреждение 3 показывает последний href 6 раз. Как мне заставить его использовать тот же объект (linkdom, он же thelink), что и alert 2.

ПРИМЕЧАНИЕ: это в скрипте greasemonkey

    {
        var linkdom = thelink;
        alert('2' + linkdom.getAttribute("href"));
        GM_xmlhttpRequest({
            method: 'GET',
            url: href,
            onload: function(resp){
                //...
                alert('3' + linkdom.getAttribute("href"));
            }
        });
    //...
    }

1 Ответ

1 голос
/ 09 июня 2010

Если бы это была ваша собственная функция, я бы сказал, чтобы передать ее в качестве параметра.Или, если бы JavaScript имел параметры по умолчанию, я бы сказал, передать его как параметр по умолчанию.Но так оно и есть сейчас ... попробуй это.

{
    var linkdom = thelink;
    alert('2' + linkdom.getAttribute("href"));        
    GM_xmlhttpRequest({
        method: 'GET',
        url: href,
        onload: (function() { 
              var localvar = linkdom; 
              return function(resp){
                //...
                alert('3' + localvar.getAttribute("href"));
              }})()
    });
//...
}

Это создает внешнюю функцию и устанавливает для локальной переменной текущее значение linkdom.Затем он создает вашу функцию и возвращает ее.Затем я немедленно применяю внешнюю функцию, чтобы вернуть вашу функцию.Внешние функции не будут использовать одну и ту же локальную переменную, поэтому код должен работать.

...