6

window.onbeforeunload が適切にトリガーされています。確認ボックスを表示して、ユーザーがウィンドウをナビゲート (クローズ) していること、および保存されていない作業が消去されることを確認します。

ユーザーがリンクをクリックしてページから移動した場合にこれをトリガーしたくないという独特の状況がありますが、関数内でリンクがクリックされて関数が停止したかどうかを検出する方法がわかりません. これは私がコードのために持っているものです:

window.onbeforeunload = function() {
var message = 'You are leaving the page.';

/* If this is Firefox */
if(/Firefox[\/\s](\d+)/.test(navigator.userAgent) && new Number(RegExp.$1) >= 4) {
  if(confirm(message)) {
    history.go();
  } 
  else {
    window.setTimeout(function() {
      window.stop();
    }, 1);
  }
}
/* Everything else */
else {
  return message;
}
}
4

3 に答える 3

5
var link_was_clicked = false;
document.addEventListener("click", function(e) {
  if (e.target.nodeName.toLowerCase() === 'a') {
    link_was_clicked = true;
  }
}, true);

window.onbeforeunload = function() {
  if(link_was_clicked) {
    link_was_clicked = false;
    return;
  }
  //other code here
}
于 2013-03-09T16:46:15.280 に答える
1

タイマーを使用してalink unloadまたは a sを区別できます。これにより、リンクがクリックされた直後に がトリガーされたreload/user entering a different address unloadことがわかります。beforeunload

jQuery を使用した例:

$('a').on('click', function(){
  window.last_clicked_time = new Date().getTime();
  window.last_clicked = $(this);
});

$(window).bind('beforeunload', function() {
  var time_now = new Date().getTime();
  var link_clicked = window.last_clicked != undefined;
  var within_click_offset = (time_now - window.last_clicked_time) < 100;

  if (link_clicked && within_click_offset) {
    return 'You clicked a link to '+window.last_clicked[0].href+'!';
  } else {
    return 'You are leaving or reloading the page!';
  }
});

(Chromeでテスト済み)

于 2014-07-30T13:18:25.140 に答える