2017-08-10 12 views
2

JavaScriptを初めて使用して、このTampermonkeyスクリプトが動作するようにしようとしています。スクリプトは、1ページからデータを収集するときにうまく動作します。しかし、以前と同じようにデータを収集し、別のページに移動してデータ収集を続行するようにしたいと考えています。JavaScriptを実行する前にページが読み込まれるのを待つ

マイコード:

setTimeout(function() { 
}, 5000); 

window.onload = function(){ 
}; 

しかし、私は動作するようにコードを取得することはできません、:

$(document).ready(function() { 
    $("#getData").click(function() { 
     // Part 1. Collect data and move on 
     window.location.href = goToURL; 
     // Part 2. Collect more data when the page has fully loaded 
    }); 
}); 

私は、内のコードのパート2を入れて疲れていページがロードされる前に実行されるか、まったくそうではないように見えます。私は何が欠けていますか?

+2

新しいページとは、コードの新しいインスタンスを意味します。メモリに格納されているものはすべて失われます。新しいページは同じドメインにありますか? – charlietfl

+0

Tampermonkeyでコードを実行しても? はい、同じドメインにあります。 – Joshua

+0

はい... Tampermonkeyは、ページが読み込まれるたびに新しいインスタンスを実行します。 @Vladimir localStorageの提案はそれを行う簡単な方法です。または、クラウドストレージを使用する – charlietfl

答えて

1

location.hrefでページを変更すると、JSがリロードされます。したがって、ページを変更する間にデータを格納する方法が必要です。私はあなたのコードは次のようになりLocalStorage を使用することをお勧め:

function storeState(state){ 
    localStorage.setItem('state', state); 
} 

function loadState(state){ 
    return localStorage.getItem('state'); 
} 

$(document).ready(function() { 
    var state = getState(); 
    $("#getData").click(function() { 
     // Collect data and put it into state 
     storeState(/* your collected state*/) 
     window.location.href = goToURL; 
    }); 
}); 

のlocalStorageのみ@charlietfl言及したとしても 文字列を保存するので、あなたには、いくつかのシリアル化/デシリアライズのものをしなければならないことに注意してください、あなたが別のドメインを持っている場合、それは追加の原因となります難易度

+0

クリックハンドラにはないので「パート2」のコメントを移動する必要があります – charlietfl

+0

もちろん、ありがとう –

関連する問題