You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
functionstart(win,main){if(isPreviewLoad(win)){return;}vardoc=win.document;varexecuted=false;varisPrerender=function(){returndoc.visibilityState==='prerender';};varcb=function(){if(!executed&&!isPrerender(win)){executed=true;main();// 解除事件监听off(doc,'visibilitychange',cb);}};if(isPrerender(win)){// 添加事件监听on(doc,'visibilitychange',cb);return;}main();}start(window,function(){// TODO 业务主逻辑});
preview
Safari浏览器有个Top site功能,它会展示最长访问的几个页面的截图。示例如下:
Safari会去真正的加载解析这几个站点页面,然后截图并保存。当用户点开这些站点时会再次加载解析这些页面。
GA的功能是统计正常用户的访问情况,很明显这种情况已经不是正常的访问了,所以对这种情况做了过滤。凡是是预览(preview)请求都不会执行自己的主要逻辑。示例代码如下:
prerender
W3C标准(WD)中有个
prerender
特性。如果在指定页面index.html
的HTML代码头部中加入如下的meta
标签:那么浏览器在加载
index.html
的时候,会预先加载渲染article.html
页面,但是不展现。当浏览器真正点开页面中article.html
页面的地址时,浏览器才会再真正的展现这个页面。不过用户也有可能不再点击article.html
的地址,而是直接离开了或是跳去别的页面。目前IE>=11、Chrome>=13、Opera>=15都支持了这个特性。GA为了避免发送无用的统计,也过滤掉了预渲染的情况,在页面真正展示的时候再执行自己的主逻辑。它通过浏览器提供的Page Visibility API来判断当页面处于的状态。如果页面是预渲染,那么页面渲染时
document.visibilityState
的值为prerender
。然后监听visiableChange
事件,当页面可见之后开始执行业务主逻辑。综合
preview
和prerender
两种情况,我们可以用如下代码来判断是否需要执行自己的业务主逻辑:参考资料:
The text was updated successfully, but these errors were encountered: