2

ユーザーがバックグラウンド プロセスを開始できるページがあります。ユーザーがページを更新したり、タブやブラウザを閉じたりした場合に備えて、このプロセスを停止したいと思います。試してみconnection_abort()ましたがうまくいきませんでした。スクリプトはそのまま実行されます。何か案は?

4

2 に答える 2

0

ユーザーに一意の識別子があり、これをプロセス ID と関連付けたり、保存したりできる場合は、次のロジックが機能します。

  1. ユーザーリクエストページ
  2. ユーザーには一意の ID が与えられます
  3. バックグラウンド プロセスが開始され、その ID がユーザー ID とともにデータベースに記録されます。
  4. プロセスは、選択した頻度でデータベースをチェックし続け、データベース内のレコードが存在しない場合、または期待どおりでない場合、プロセス自体を停止します。
  5. 次に、ユーザー用のフロントエンドは次のいずれかになります。
    • 必要なときに ajax を介してスクリプト (つまり、stop_process.php?user=id) をトリガーします。つまり、ページが移動したときです。このアプローチは、onbeforeunload が特定のブラウザーで ajax リクエストを防止または停止するため、信頼できない場合があります。
    • db 内のプロセス レコードをタイムスタンプで更新し続ける ajax ポーリング スクリプトを用意します。このスタンプが古くなった場合 (つまり、ユーザーが別の場所に移動したか、js を停止したことを意味します)、プロセスが停止します。

上記はかなり複雑な解決策です(そして、JavaScript に依存しているため気まぐれかもしれません) ので、本当に必要な場合、またはターゲット ユーザーをロックダウンできる場合にのみ検討する必要があります。

js 以外のソリューションとして、ポーリング メソッドに依存し、メタリフレッシュ フレームを設定できます。ただし、これにより、古いバージョンの Internet Explorer のユーザーが絶え間ない「クリック」に気が狂う可能性があります。ソリューションがかなり洗練されていないことは言うまでもありません。

于 2012-10-05T10:51:55.050 に答える
0

あなたは運が悪いと思います。httpページが提供されるとすぐに接続が閉じられます。

いくつかの ajax トリック以外に、ユーザーがブラウザーを更新したり閉じたりしたことを知る方法はありません。

于 2012-10-05T10:28:22.163 に答える