代码之家  ›  专栏  ›  技术社区  ›  OmB

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

  •  0
  • OmB  · 技术社区  · 6 年前

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

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

    div.scrollTop = div.scrollHeight;
    

    如果我在另一个选项卡中,滚动不起作用。。。

    有国旗吗 chrome://flag

    2 回复  |  直到 5 年前
        1
  •  1
  •   OmB    6 年前

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

    一个解决方案是在新窗口中打开选项卡,使选项卡可见(尽管此窗口没有聚焦) 设置“限制昂贵的后台计时器”chrome://flags to 使残废

        2
  •  1
  •   joe    4 年前

    if(document.hidden) {
      while(document.hidden) await new Promise(r => setTimeout(r, 1000));
      // do scrolling stuff here
    }
    

    但是对大多数人来说更好的解决方案是使用 visibilitychanged 事件 Page Visibility API :

    document.addEventListener("visibilitychange", function() {
      if(document.hidden) {
        // tab has become inactive/hidden
      } else {
        // tab has become visible
      }
    })
    

    我还没测试过那个代码。显然,您需要在那里添加一些额外的代码,以确保它只触发您的 tab has become visible 在页面第一次可见时编写代码(假设这是您想要的)。

        3
  •  0
  •   Xan    5 年前

    我有类似的问题与非活动标签

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