0

我正在尝试跟踪用户在我网站上的特定页面上停留的时间。我使用 sendBeacon、AJAX 作为 Fallback 和 Page Visibility API。它适用于所有浏览器,甚至在关闭或切换选项卡时也适用于 Safari。

现在的问题是,当我在我的网站上使用导航链接时,跟踪在 Safari 中不起作用,但在所有其他浏览器中都不起作用。这是代码:

// Check Browser Support of sendBeacon
            if(navigator.sendBeacon) {
                // Check Browser Support of Page Visibility API
                var visibilityHidden, visibilityChange;
                
                // Opera 12.10 and Firefox 18 and later support 
                if(typeof document.hidden !== "undefined") {
                    visibilityHidden = "hidden";
                    visibilityChange = "visibilitychange";
                } else if(typeof document.mozHidden !== "undefined") {
                    visibilityHidden = "mozHidden";
                    visibilityChange = "mozvisibilitychange";
                } else if(typeof document.msHidden !== "undefined") {
                    visibilityHidden = "msHidden";
                    visibilityChange = "msvisibilitychange";
                } else if(typeof document.webkitHidden !== "undefined") {
                    visibilityHidden = "webkitHidden";
                    visibilityChange = "webkitvisibilitychange";
                }
                
                if(visibilityHidden !== undefined) {
                    document.addEventListener(visibilityChange, function() {
                        if(document[visibilityHidden]) {
                            var data = new FormData();
                            
                            data.append('pageid', '{{page::id}}');
                            data.append('userid', uid);
                            data.append('language', '{{page::language}}');
                            data.append('referer', decodeURIComponent(document.referrer));
                            data.append('start', starts);
                            data.append('duration', Math.ceil(TimeMe.getTimeOnCurrentPageInSeconds(window.location.href)));

                            navigator.sendBeacon('/time/', data);
                        }
                    });
                } else {
                    sendAjax();
                }

有人知道如何解决这个问题吗?

4

0 回答 0