if ((window.screenLeft >= 10000 && window.screenTop >= 10000) || event. ft "," window.screenTop);
//使用者非正常關閉時需要觸發的動作 location = 'Handler1.ashx';
Handler1.ashx:
using System.Web;
using System.Web.Services;
using System.Web;
using System.Web.Services;
using System.Web.SessionState;
namespace WebApplication1
{
///
/// $codebehindclassname$ 的摘要說明
://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class Handler1 : IHttpHandler,IRequiresSessionState public void ProcessRequest(HttpContext context)
{
context.Session.Clear() ;
}
public bool IsReusable
{
return false;
}
:
一般的會員形式的網站,在會員登陸後都會建立會話或Cookie,然後需要在會員退出時點退出連線或按紐退出。在會員直接關閉窗體的時候,沒有觸發涉及到退出的一系列退出。而這些要等到伺服器會話過期才會被清除掉。
複製代碼
onBeforeUnloadでは、これらの画面の座標属性は通常の値であることに注意してください。
screenLeft: 画面の左上隅を基準としたブラウザーのクライアント領域の左上隅の x 座標を取得します。
screenTop: 画面の左上隅を基準としたブラウザーのクライアント領域の左上隅の y 座標を取得します。
フォームが破壊されると特別な値が生成されるのでしょう。通常のクリックテストではこの値を超えることはありません。
問題は、onBeforeUnload で window.location を使用すると、指定された URL にリクエストを正常に送信できますが、このメソッドが onUnload イベントで効果的に実行できないことです。解決策は、新しいウィンドウを開いて閉じることです。
過去に使用された一連の window.location を置き換えるには、次のようなものを書くことができます。ポータルには複数のクロスサーバー Web サイト サーバーが関与するためです。ポータルサイトの効果を発揮するには、統一された入口から退出した後、順次退出する必要があります。
var newWindow;
window.opener=null;
newWindow=window.open(URL,PageName, 'height=0,width=0'); >newWindow.close();
……
このコードはテスト済みです。オブジェクトが破棄される直前にイベントがトリガーされるため、onUnload では window.close を使用しないでください。 onBeforeUnload は、ページがアンロードされる前にトリガーされるイベントです。
いわゆるクリアとは、基本的に、新しいウィンドウを開いて exit 関数を使用してページを直接呼び出すことです。通話を終了するときに 1 ~ 2 秒間一時停止するか、専用の終了ページでウィンドウが閉じる場合があります。このページと通常の終了およびホームページへの切り替えとの違いは、終了後にページが自動的に閉じられ、追加の制御なしで直接開くことができることです。
【注意】window.onUnloadで判定を行わなかった場合、ページの更新など現在のページが変更された際にこのイベントが発生します。したがって、一部の通常の操作をブロックするには、特定の操作をキャプチャする判断を下す必要があります。
続き: ユーザーが IE でウィンドウを直接閉じる前にセッションをクリアする方法
昨日実装アイデアを説明しましたが、実際に動作させてみると、プログラムを正常に実行するには遅延を追加する必要があることがわかりました。実装の詳細と、単純な時間遅延関数を以下に添付します。コードはテスト済みです。