onbeforeunload 并不总是有效

Jon*_*nny 2 javascript onbeforeunload

我正在制作一个简单的脚本,用于在用户访问页面和离开页面时保存一些数据以及其他一些页面详细信息。该脚本“有效”,但并非始终有效。它似乎偶尔工作。我没有收到控制台错误。服务器端工作正常。

window.onload = function() {


var timeStarted, i, c, l, timeLeft, pageData; 

timeStarted = new Date().getTime();

i = <?php echo $model->id; ?>;
c = <?php echo $model->cat; ?>;
l= <?php echo $model->loc; ?>;

window.onbeforeunload = function(){

timeLeft = new Date().getTime();

pageData = [{name: 'timeStarted', value: timeStarted}, 
            {name: 'i', value: job},
            {name: 'c', value: cat},
            {name: 'l', value: loc},
            {name: 'timeLeft', value: timeLeft}];

// Set url for JavaSCript
var url = '<?php echo Yii::app()->createUrl("item/viewedItemInformation"); ?>';

<?php echo CHtml::ajax(array(
        'url'=>'js:url',
        'data'=> "js: pageData",
        'type'=>'post',
        'dataType'=>'json',
        )); ?>;             
}
}
Run Code Online (Sandbox Code Playgroud)

笔记

我刚刚读过这篇文章window.onbeforeunload 无法在 chrome 中工作,而我正在使用 chrome。不过我似乎在 FF 中也得到了相同的结果。

解决这个问题的正确方法是什么?

更新 我真的无法告诉你它在什么情况下起作用和不起作用。我只在项目页面上使用此功能。有时,当我单击一个项目页面并离开以访问另一个项目时,它会起作用,但有时却并非如此。我可以说的是,如果我离开项目页面进入非项目页面(例如主页),则不会记录任何记录。

aer*_*min 6

onbeforeunload仅当用户与站点有任何交互时才会触发事件。如果页面上没有任何交互事件(例如单击,不包括悬停),onbeforeunload则不会被触发。