我正在开发一个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?
由于
答案 0 :(得分:0)
有两种方法:
在后台页面中使用tabs
API检查页面何时加载。完成后,向该选项卡发送一条消息并继续执行该脚本。
我最近使用的一个简单的:
window.addEventListener('load', function() {
$('#anotherButton').click();
});
应该工作。
答案 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)
}