1

window.open(url)などをトリガーするonbeforeunloadイベントを作成しようとしています。ユーザーがページを離れようとした場合、またはブラウザーを閉じた場合にトリガーされますが、上のボタンのいずれかをクリックした場合にはトリガーされません。ページ。ページのボタンは、JavaScriptを介して同じページにデータを投稿します。

javascript:

window.onbeforeunload = doSync;

function doSync(){
   if(doSync == true){
       //do sync via popup
       window.open("http://mydomain.com/page.php?var=<?php=sync_var?>", "Synchronizing cluster....", "location=0,menubar=0,statusbar=1,width=10,height=10");
   }
   else {
     //somehow do nothing and allow user to leave

   }
}
-->
</script>

ボタンは、フォームを作成して送信するjavascript関数を呼び出します。そのjavascript関数で、doSyncのグローバル変数=falseを設定しました。説明のために、この関数の基本的なコードを含めます。

function buttonPush(){
   var form = document.createElement('form');
   form.setAttribute('method' bla bla

   //before submit set dosync to false
   doSync = false;

   form.submit();
}

現在、 window.onbeforeunload=doSyncで実装されていないエラーが発生しています。声明。

どんな助けでもいただければ幸いです。

ありがとう、

ジム

window.openに何か問題がありますか?私がするならwindow.open('','','height=100,width=100');

正常に開きますが、以下では開きません。

window.open('https://mydomain.com/support/sync_cluster.php?sync_cluster=mycluster','Synchronizing...', 'toolbar=0,scrollbars=0,location=0,statusbar=1,menubar=0,resizable=0,width=100,height=100');
4

2 に答える 2

4

doSyncは関数であり、ブール値ではありません。変数を作成して適切に設定するだけです。

var sync = true;
window.onbeforeunload = doSync;

function doSync() {
  if (sync == true) {
    //do sync via popup
    window.open("http://mydomain.com/page.php?var=<?php=sync_var?>", "Synchronizing cluster....", "location=0,menubar=0,statusbar=1,width=10,height=10");
  }
  else {
    //somehow do nothing and allow user to leave
    return;
  }
}
function buttonPush(){
   var form = document.createElement('form');
   // form.setAttribute('method' bla bla

   //before submit set dosync to false
   sync = false;

   form.submit();
}
于 2012-04-06T20:33:33.680 に答える
2

これを試して:

var vals = 0;

function displayMsg() {
  window.onbeforeunload = null;
  window.location = "https://www.google.com";
}

window.onbeforeunload = function evens(evt) {
  var message = 'Please Stay on this page and we will show you a secret text.';
  if (typeof evt == 'undefined') {
    evt = window.event;
  }
  timedCount();
  vals++;
  if (evt) {
    evt.returnValue = message;
    return message;
  }
  trace(evt);
}


function timedCount() {
  t = setTimeout("timedCount()", 500);
  if (vals > 0) {
    displayMsg();
    clearTimeout(t);
  }
}
$(document).ready(function() {
  $('a,input,button').attr('onClick', 'window.onbeforeunload = null;')
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<a href="https://en.wikipedia.org/wiki/Frame_(World_Wide_Web)">Leave</a>

于 2013-01-30T22:53:34.753 に答える