Imacros/jQuery TypeError: can't access dead object, line 816 (Error code: -991)

Imacros/jQuery TypeError: can't access dead object, line 816 (Error code: -991)

我正在尝试编写一个使用 jQuery 的 iMacros 脚本,但似乎如果我刷新页面,我会得到

TypeError: can't access dead object, line 816 (Error code: -991)

这是我当前的代码:

//Macros
refreshPage = "CODE:";
refreshPage += "SET !TIMEOUT_PAGE 30" + "\n";
refreshPage += "SET !ERRORIGNORE YES" + "\n";
refreshPage += "SET !TIMEOUT_STEP 2" + "\n";
refreshPage += "URL GOTO=somewebsite.com" + "\n";


    //Go to website
    iimPlay(refreshPage);

    //Main Code
    //Iclude jQuery
    function loadScriptFromURL(url) {
       var request = Components.classes['@mozilla.org/xmlextras/xmlhttprequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest),
       async = false;
       request.open('GET', url, async);
       request.send();
       if (request.status !== 200) {
          var message = 'an error occurred while loading script at url: ' + url + ', status: ' + request.status;
          iimDisplay(message);
          return false;
       }
       eval(request.response);
       return true;
    }
    loadScriptFromURL('https://www.dropbox.com/s/47cj0fqxnsijm2n/jquery-2.2.2.min.js?raw=1');
    $ = window.$,
       JQuery = window.JQuery;

    // Get List
    var jscList = [];
    var llcList = []; // not in use
    var companiesList = $('#companieshomelist').children();
    if (companiesList[0].innerText.match(/S.A./gi)) {
       for (var i = 1, j = companiesList.length; i < j; i++) {
          if (companiesList[i].innerText.match(/L.L.C/gi)) {
             break;
          } else {
             jscList.push(companiesList[i].innerText.split('\n')[0])
          }
       }
    }

    for (var i = 0, j = 1; i < j;i++) {
    iimPlay(refreshPage);
     foo() // script still works, foo can be anything js code/iMacros code and it works.
    companiesList[i+1].click(); // script throws dead object error, seems to happen if I try to use ANY jQuery code after page is refreshed 

    }

我想也许 jquery 需要再次加载所以我尝试移动它,复制它,甚至将它包含在一个名为 refresh 的函数中,该函数包含刷新宏,所以它在页面刷新后立即加载但是结果都是一样的。 jQuery 很新,您可能可以通过代码判断,所以我不知道如何解决这个问题,甚至不知道问题是什么。

我愿意接受使用 Mozilla use/load jQuery 的任何替代方法。

FF/Mozilla45.0.1// iMacros 8.9.6// Windows 7// jQuery 2.2.2.min.js //

作为一个可能的解决方案,我只是重写了您的脚本,以便它可以使用网页上已经加载的 jQuery 库。

//Macros
refreshPage = "CODE:";
refreshPage += "SET !TIMEOUT_PAGE 30" + "\n";
refreshPage += "SET !ERRORIGNORE YES" + "\n";
refreshPage += "SET !TIMEOUT_STEP 2" + "\n";
refreshPage += "URL GOTO=somewebsite.com" + "\n";

//Go to website
iimPlay(refreshPage);

// Get List
function getList() {
    var jscList = [];
    var llcList = []; /* not in use */
    var companiesList = $('#companieshomelist').children();
    if (companiesList[0].innerText.match(/S.A./gi)) {
       for (var i = 1, j = companiesList.length; i < j; i++) {
          if (companiesList[i].innerText.match(/L.L.C/gi)) {
             break;
          } else {
             jscList.push(companiesList[i].innerText.split('\n')[0])
          }
       }
    }
}

window.location.href = "javascript:{" + getList.toString() + "getList(); undefined;}";
iimPlayCode("WAIT SECONDS=0.3");

for (var i = 0, j = 1; i < j;i++) {
    iimPlay(refreshPage);
    foo() // script still works, foo can be anything js code/iMacros code and it works.
    window.location.href = "javascript:{" + getList.toString() + "getList(); companiesList[" + (i + 1) + "].click(); undefined;}";
    iimPlayCode("WAIT SECONDS=0.3");
}

我没有注意完整的错误,正如 shugar 在评论中指出的那样,我似乎遇到了 2 个问题。 jQuery 由于某些原因刷新后必须重新加载并且必须重新定义 companiesList。

function loadJQ() {
    function loadScriptFromURL(url) {
        var request = Components.classes['@mozilla.org/xmlextras/xmlhttprequest;1'].createInstance(Components.interfaces.nsIXMLHttpRequest),
        async = false;
        request.open('GET', url, async);
        request.send();
        if (request.status !== 200) {
            var message = 'an error occurred while loading script at url: ' + url + ', status: ' + request.status;
            iimDisplay(message);
            return false;
        }
        eval(request.response);
        return true;
    }
    loadScriptFromURL('https://www.dropbox.com/s/47cj0fqxnsijm2n/jquery-2.2.2.min.js?raw=1');
    $ = window.$,
    JQuery = window.JQuery;
}
loadJQ()    

var jscList = [];
var llcList = []; // not in use
var companiesList = $('#companieshomelist').children();
if (companiesList[0].innerText.match(/S.A./gi)) {
    for (var i = 1, j = companiesList.length; i < j; i++) {
        if (companiesList[i].innerText.match(/L.L.C/gi)) {
            break;
        } else {
            jscList.push(companiesList[i].innerText.split('\n')[0])
        }
    }
}

for (var i = 0;i < 1;i++) {
iimPlay(refresh)
loadJQ()
companiesList = $('#companieshomelist').children();
companiesList[i+1].click(); 

}