2016-04-14 2 views
1

秒ハンドラ内によるダイアログにページ上に留まる場合、ユーザーが実際にページから移動したときに、それが呼び出されたハンドラをbeforeunload:しかしスキップは、ユーザーが、私は1つのbeforeunloadハンドラを持っている

$(window).on("beforeunload", function() { 
    cleanup(); 
}); 

自分のアプリケーションの別の部分かもしれません私は2番目のハンドラは常に最初に呼び出されることと最初のハンドラはならないことを、保証することができますどのように

$(window).on("beforeunload", function() { 
    return "Do you really want to leave"; 
}); 

:彼は本当にために継続的な操作のままにしたい場合は、ユーザーに尋ねる別beforeunloadハンドラを追加ユーザーがsと決める場合に呼び出されるページにはどうですか?

すでにunloadイベントを使用しようとしました。しかし、この機能では、クリーンアップ機能とバックエンド呼び出しを確実に実行しないため、これは機能しません。

+1

これを試してください:http://stackoverflow.com/questions/17759703/is-there-any-way-to-detect-if-user-pressed-stay-on-page-or-leave -page-in-bef –

+0

@IsmaelMiguelありがとうございます。この質問の回答は私の場合は一切ありません。ユーザーが去ったときにsthをしなければならないので、タイムアウトを使用することはできません。また、クリーンアップ関数でバックエンド呼び出しを行う必要があるので、 'unload'を使用することはできません。アンロードを使用すると、この呼び出しは実行されないことがあります。 – basilikum

+0

あなたはそうです。これらの要件は実際には異なります。それに気付かなかった。本当にごめんなさい。 –

答えて

1

場合によってはwindow.confirmを使用できます。 (疑似コード)のように

$(window).on("beforeunload", function() { 
var result = window.confirm('Do you really want to quit?'); 
if (result) { 
    cleanup(); 
} 
} 

このようにして、ユーザーが終了したい場合は、クリーンアップします。それは動作しますか?>

+0

ありがとうございましたが、私が言ったように、私はアプリケーションの2つの異なる部分によって追加された別のハンドラにしなければならず、私は物事を分離しておきたいと思います。だから問題は、もし私が何らかの形でハンドラが呼び出される順序を保証でき、ユーザがある特定のハンドラのダイアログ中にとどまることを決めるならば、その後のすべてのハンドラを防ぐことができるかどうかということです。 – basilikum

+0

したがって、デフォルトではアンロード時にクリーンアップされますか?また、ユーザーが何かをやっている間だけ、ユーザーが離れて移動するための別のハンドラーが必要ですか? –

+0

はい、ユーザーが実際に離れるとクリーンアップが実行されるため、技術的にはアンロードしてください。しかし、unloadイベントは信頼できるものではないようですので、beforeunloadを使用する必要があります。私のアプリの一部が録音を開始し、何かを録音中であれば、本当に放置したいのかどうか聞いてきます。彼が滞在することを決めたら、グローバルな清掃をするべきではない。 – basilikum