Javascript 滚动至底部不在非活动选项卡中工作

Javascript 滚动至底部不在非活动选项卡中工作,javascript,google-chrome-extension,scroll,Javascript,Google Chrome Extension,Scroll,我正在尝试创建一个在非活动选项卡中运行的chrome扩展内容脚本 我有一个无限滚动元素,我想滚动到底部 如果选项卡处于活动状态且在前台,则以下代码有效: div.scrollTop = div.scrollHeight; 如果我在另一个选项卡中,滚动不起作用 chrome://flag可以修复它吗?或者你还有别的建议吗?好的,经过长时间的研究,我终于有了一个结论 当选项卡不可见时(选项卡可以处于活动状态但不可见),chrome不会进行UI计算。 因此,不能进行滚动计算,只能进行可见测量 解决方

我正在尝试创建一个在非活动选项卡中运行的chrome扩展内容脚本

我有一个无限滚动元素,我想滚动到底部

如果选项卡处于活动状态且在前台,则以下代码有效:

div.scrollTop = div.scrollHeight;
如果我在另一个选项卡中,滚动不起作用


chrome://flag
可以修复它吗?或者你还有别的建议吗?

好的,经过长时间的研究,我终于有了一个结论

当选项卡不可见时(选项卡可以处于活动状态但不可见),chrome不会进行UI计算。 因此,不能进行滚动计算,只能进行可见测量

解决方案是在新窗口中打开选项卡,使选项卡可见(尽管此窗口未聚焦)
并在chrome://flags 要禁用

我在非活动选项卡上也遇到了类似的问题 我可以通过生成一个滚动事件来滚动它。请参阅此代码:

var evt = document.createEvent('HTMLEvents');
evt.initEvent('scroll', false, true);
scrollTarget.dispatchEvent(evt);

为了帮助其他人,我通过等待(轮询)页面变为可见来解决这个问题:

if(document.hidden){
而(document.hidden)等待新的承诺(r=>setTimeout(r,1000));
//在这里做滚动的事情
}
但对于大多数人来说,更好的解决方案是使用以下事件的
visibilitychanged
事件:

document.addEventListener(“visibilitychange”,function()){
if(document.hidden){
//选项卡已处于非活动/隐藏状态
}否则{
//选项卡已变为可见
}
})

我还没有测试过那个代码。显然,您需要在那里添加一些额外的代码,以确保它只会在页面第一次可见时触发您的
选项卡变为可见的
代码(假设这是您想要的)。

我认为您可以在后台创建一个新窗口(焦点:chrome.windows.create中的false)并将该选项卡移动到该窗口(chrome.tabs.move)要使它在该窗口中处于活动状态,即使窗口本身不处于活动状态,它也应该工作IIRC。我也尝试过,窗口的行为是相同的。。。。如果窗口未聚焦,则滚动高度不更新:/您可以上载完整代码(选择选项卡、选择元素等)吗?这是完整代码。。即使我打开Instagram或facebook,打开开发者工具,移动到另一个选项卡并在控制台中写入:div.scrollTop=div.scrollHeight;div.scrollTop的值保持不变,就像从未分配div.scrollTop一样:/如果选项卡不可见,chrome似乎会冻结用户界面的更改。你自己试试,你会看到,如果标签是可见的,它会滚动,否则,如上所述