Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
等待页面加载,然后继续执行JavaScript_Javascript_Tampermonkey - Fatal编程技术网

等待页面加载,然后继续执行JavaScript

等待页面加载,然后继续执行JavaScript,javascript,tampermonkey,Javascript,Tampermonkey,我是JavaScript新手,正在尝试让这个脚本正常工作。当脚本从一个页面收集数据时,它工作正常。但是,我现在希望它像以前一样收集数据,然后转到另一个页面继续收集数据 我的代码: $(document).ready(function() { $("#getData").click(function() { // Part 1. Collect data and move on window.location.href = goToURL;

我是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);


但是我无法让代码正常工作,它要么在页面加载之前执行,要么看起来根本没有。我遗漏了什么?

当您使用
location.href
更改页面时,您的JS将重新加载。因此,您需要一种在页面更改之间存储数据的方法。我建议使用 您的代码如下所示:

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如果您有不同的域,它将导致额外的困难

新页面意味着代码的新实例。存储在内存中的任何东西都会丢失。新页面是否在同一个域上?即使在通过Tampermonkey执行代码时也是如此?是的,它在同一个域上。是的…Tampermonkey在每次页面加载时都运行新实例@Vladimir关于localStorage的建议是一种简单的方法。或者使用云存储应该移动“第2部分”的注释,因为它不在单击处理程序中
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;
    });
});