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();
}
我正在尝试编写一个使用 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();
}