【问题标题】:Rails w/ Turbolinks window.onbeforeunloadRails w/ Turbolinks window.onbeforeunload
【发布时间】:2017-01-12 19:42:29
【问题描述】:

我目前有一个使用 Turbolinks 的 Rails 应用程序。在这个应用程序中,我试图跟踪在特定视图上花费的时间。我查看了无数问题,并经历了称为 window.onbeforeunload、window.beforeunload、window.on('beforeunload') 的多种变体......我目前的尝试是这样的:

$(document).ready(function() {

var start = Date.now();

var id = gon.subjId;
var rand_index = gon.randIndex;
var index = gon.index;

console.log('showing article ' + index + ' at index ' + rand_index + ' for ' + id);

$(document).on('turbolinks:before-change', function() {
  $.post('/log', {subj_id: id, article: {index: index, rand_index: rand_index, time_spent: Date.now()-start}},
    function(response) {
    });
})

});

我知道使用 AJAX 请求的功能有效;但是,它没有被调用。按下后退按钮时如何调用此函数?

【问题讨论】:

  • 我认为 Rails 5 已将 turbolinks 事件的命名空间更改为 turbolinks 而不是 page 尝试使用 turbolinks:before-change
  • 我试过了并更新了问题,但还是不行
  • turbolinks:load现在有一个event.data.timing,这不是您期望看到的日期吗?参考这个link

标签: javascript ruby-on-rails turbolinks


【解决方案1】:

我仍然不确定潜在的错误是什么,但我将脚本更改为这个并像魅力一样工作:

$(document).ready(function() {
var start = Date.now();

var id = gon.subjId;
var rand_index = gon.randIndex;
var index = gon.index;

console.log('showing article ' + index + ' at index ' + rand_index + ' for ' + id);

function logVisit() {
  console.log('logging visit');

  $.post('/log', {subj_id: id, article: {index: index, rand_index: rand_index, time_spent: Date.now()-start}},
    function(response) {
  });
  document.removeEventListener('turbolinks:before-cache', logVisit);
}

document.addEventListener('turbolinks:before-cache', logVisit);
});

【讨论】:

    猜你喜欢
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多