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

时间:2015-11-26 13:38:16

标签: javascript jquery google-chrome google-chrome-extension

我正在开发一个chrome扩展程序来自动完成我的一些工作。 目前,它会在搜索中输入一个值,然后点击搜索按钮。

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

$('#searchBox').val(Arr[i]); //Where Arr is a series of search values
$('#searchSubmit').click();
//Wait until new page is up, then continue
$('#anotherButton').click();
//etc

所以我很难过。我怎么告诉脚本要等到新页面加载完毕?在控制台网络选项卡中,我可以看到它在执行之前处于待处理状有没有办法可以挂钩等待?或者是否有某种我可以用来检测新页面加载的mutobserver?

由于

4 个答案:

答案 0 :(得分:0)

有两种方法:

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

  2. 我最近使用的一个简单的:

    window.addEventListener('load', function() {
       $('#anotherButton').click();
    });
    
  3. 应该工作。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

最终这种失败是合乎逻辑的。因为它是javascript,因此前端面对,我不想干扰多个选项卡,我不得不接受我无法监听页面重新加载(因为脚本显然重新加载)。我只是告诉脚本要听主网址。如果它找到主url它可能是在脚本的第一个实例,所以我传递了一个0作为我的函数的参数。如果它不在主页面上,我传递1,触发不同的逻辑线。最后,我在页面上使用了长度计数来指示页面差异,然后根据此传递不同的参数。

答案 3 :(得分:0)

我创建了一个辅助函数,该函数每500毫秒检查一次当前标签页的加载状态:

@objc func handletapButton() {
    UIView.animate(withDuration: 0.5, delay: 0, options: .curveEaseOut, animations: {
        self.up?.isActive = false
        self.down?.isActive = true
        self.view.layoutIfNeeded()
    }, completion: nil)
}