Chrome prerender:如何延迟javascript直到页面实际加载?

Chrome prerender:如何延迟javascript直到页面实际加载?,javascript,html,google-chrome,Javascript,Html,Google Chrome,我正在使用Chrome页面预渲染: <link rel="prerender" href="nextpage.html"> 我的问题是,在nextpage.html上,我有一个javascript(notify.js),它会在几秒钟内显示一个通知弹出窗口。因为javascript是预渲染的,所以用户实际上从未看到通知(它显示在隐藏的预渲染选项卡中) 有没有一种方法可以让我知道特定的javascript只在实际的页面显示上执行,而不是在预先呈现的页面上执行?查看Chrome,我看

我正在使用Chrome页面预渲染:

<link rel="prerender" href="nextpage.html">

我的问题是,在nextpage.html上,我有一个javascript(notify.js),它会在几秒钟内显示一个通知弹出窗口。因为javascript是预渲染的,所以用户实际上从未看到通知(它显示在隐藏的预渲染选项卡中)


有没有一种方法可以让我知道特定的javascript只在实际的页面显示上执行,而不是在预先呈现的页面上执行?查看Chrome,我看到了一些关于“插件延迟”的信息,但没有关于javascript的明确说明。

我认为您可以延迟通知功能,直到页面在浏览器中可见为止

所以,基本上尝试订阅事件,并在事件可见时触发必要的操作。可能您只需要一次附加标志来通知:

let alreadyNotified = false

document.addEventListener('visibilitychange', function() {
  if (!document.hidden && !alreadyNotified) {
    // run notification
    alreadyNotified = true
  }
})

文档中提到的页面可见性api似乎正是您所需要的。顺便说一句,如果用户到达带有通知的页面时,没有使用“在新选项卡中打开且不显示前景”命令显示,则在不进行预呈现的情况下,您会遇到此问题。一个不那么花哨的解决方案是不显示不可见的、自动消失的通知,而是显示用户可以忽略的通知。