2017-08-10 147 views
2

我是JavaScript新手,試圖讓Tampermonkey腳本工作。這些腳本在從一個頁面收集數據時工作得很好。但是,我現在希望它像以前一樣收集數據,但是隨後轉到另一頁並繼續收集數據。在繼續執行JavaScript之前等待頁面加載

我的代碼:

$(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部分:

setTimeout(function() { 
}, 5000); 

window.onload = function(){ 
}; 

但我不能讓代碼工作,它要麼在頁面加載之前執行,要麼看似完全不執行。我錯過了什麼?

+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

當然,謝謝 –

相關問題