Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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 Chrome扩展-等待页面重新加载以继续脚本_Javascript_Jquery_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展-等待页面重新加载以继续脚本

Javascript Chrome扩展-等待页面重新加载以继续脚本,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我正在开发一个chrome扩展来自动化我的一些工作。 当前,它在搜索中输入一个值,然后单击搜索按钮 我想让它点击另一个按钮时,它进入下一页(一旦加载)。但是到达新页面所需的时间各不相同,因此我不能使用setTimeout(页面加载将花费3秒到3分钟的时间,根据我在搜索中输入的内容完全随机) 所以我被难住了。我究竟如何告诉脚本等待新页面加载?在控制台网络选项卡中,我可以看到它在执行之前处于挂起状态。有什么方法可以让我在这里等待吗?或者是否有某种类型的变体观察器可以用来检测新的页面加载 谢谢有两种方

我正在开发一个chrome扩展来自动化我的一些工作。 当前,它在搜索中输入一个值,然后单击搜索按钮

我想让它点击另一个按钮时,它进入下一页(一旦加载)。但是到达新页面所需的时间各不相同,因此我不能使用setTimeout(页面加载将花费3秒到3分钟的时间,根据我在搜索中输入的内容完全随机)

所以我被难住了。我究竟如何告诉脚本等待新页面加载?在控制台网络选项卡中,我可以看到它在执行之前处于挂起状态。有什么方法可以让我在这里等待吗?或者是否有某种类型的变体观察器可以用来检测新的页面加载

谢谢

有两种方法:

  • 在后台页面中使用
    tabs
    API检查页面何时加载。完成后,向该选项卡发送消息并继续脚本

  • 我最近使用的简单方法是:

    window.addEventListener('load', function() {
       $('#anotherButton').click();
    });
    

  • 应该可以工作。

    没有任何代码就不容易帮助您。但在我自己的扩展中,每次加载或重新加载页面时,都会调用我的内容脚本。然后,我只需检查
    location.href的值(或部分值),以了解发生了什么,并相应地进行分支。

    最后,这是一个逻辑故障。因为它是javascript,所以面向前端,而且我不想干扰多个选项卡,所以我不得不接受我无法监听页面重新加载(很明显,脚本是随着重新加载一起进行的)。我只是让脚本监听主url。如果它找到了主url,则很可能是在脚本的第一个实例中,因此我将0作为函数的参数传递。如果它不在主页上,我会传递一个1,触发另一行逻辑。最后,我在页面上使用长度计数来表示页面差异,然后在此基础上传递不同的参数。

    我制作了一个帮助函数,每500毫秒检查一次当前选项卡的加载状态:

    函数等待加载(回调){
    chrome.tabs.query({active:true,currentWindow:true},(tabs)=>{
    let timer=setInterval(()=>{
    chrome.tabs.executeScript(制表符[0].id{
    代码:`eval(“document.readyState”)`,
    },(数据)=>{
    如果(数据[0]=“完成”){
    回调函数()
    清除间隔(计时器)
    }
    })
    }, 500)
    })
    }
    
    我正在以内容脚本的形式运行它。它是一个在集合网站上运行的.js文件。不幸的是,后者似乎不起作用。当您单击“搜索”时,页面会重新加载,或者只是通过AJAX等加载内容?导航到新页面您指的是您的内容脚本。
    window.addEventListener('load', function() {
       $('#anotherButton').click();
    });