2016-03-22 9 views
0

私はjQueryのを使用していますimacrosのスクリプトを記述しようとしているが、私がページを更新する場合、私はimacrosの/ jQueryのはTypeError:死んでオブジェクトにアクセスすることはできません、ライン816(エラーコード:-991)

取得するようです
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の私はそれを複製し、それを周りに移動しようとしたので、再ロードするために必要と考えページが更新された直後に読み込まれますが、結果は同じですすべて。あなたはおそらくコードで伝えることができるので、私はこれを解決する方法や問題が何であるかわからないので、jQueryでかなり新しいです。

MozillaでjQueryを使用する/ロードするための代替方法はありません。

FF/Mozillaの// 45.0.1 imacrosの8.9.6 // のWindows // 7 jQueryの2.2.2.min.js //

+1

ループの内部でページを更新しますが、 'jQuery'をロードしていないと、再び' companiesList'変数を定義していないので、私は、ループの中にあなたのメインコードのブロックを交換示唆しています。 – Shugar

+0

私はそれを前と後の両方のループ内で同じことを試みましたが、companiesList [i + 1] .click()をランダムなjQueryコマンドと同じストーリーに置き換えたので、companiesListは問題ではありません。 – Trax

+0

自動化するページにjQueryがありますか? – Shugar

答えて

1

私は完全なエラーに注意を払わなかったし、コメントに指摘されたように私は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(); 

} 
1

ように、私はちょうどあなたのスクリプトを書き直し可能な解決策として、すでにWebページにロードされている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"); 
} 
+0

興味深い解決策、ありがとう。 – Trax

関連する問題