أفضل طريقة للكشف عن إغلاق المستعرض / التنقل إلى صفحة أخرى وقم بإجراء تسجيل الخروج

StackOverflow https://stackoverflow.com/questions/888483

سؤال

أنا أكتب تطبيقا في GWT وأحتاج إلى اكتشاف عندما ينقل المستخدم بعيدا عن طلبي أو عندما يغلق نافذة المتصفح (الحدث Onunload) وقم بإجراء تسجيل الخروج (إبطال جلسة وقلة مهام التنظيف الأخرى). يتم إجراء إجراء تسجيل الخروج من قبل Servlet.

أنا أفعل ذلك حاليا من خلال ربط الحدث Onunload () وفتح نافذة جديدة تمت الإشارة إلى Servlet تسجيل الخروج.

هل هناك طريقة أفضل للقيام بذلك؟ أي اقتراحات أخرى هي موضع ترحيب.

هل كانت مفيدة؟

المحلول

يبدو أن GWT لديه حدث لهذا بالضبط.

closingevent..

يبدو أنك بحاجة إلى تنفيذ closinghandler.

نصائح أخرى

لماذا لا تصنع ملف تعريف ارتباط جلسة عصر قصير للغاية يتم إعادة تعيينه مع تحميل كل صفحة، ثم أضف ملف تعريف ارتباط تتبع. عندما يعود المستخدم لاحظت أن ملف تعريف الارتباط تتبع ولكن لا ملف تعريف ارتباط جلسة. تنتهي الجلسة واضحة كل شيء في تلك المرحلة.

سيمنع حاصرات المنبثقة من تنظيف الجلسة الخاصة بك عند حظر فتح نافذة التحميل Onunload، لأن هذا هو شيء يستخدمه البريد المزعج.

هذه هي الطريقة التي يعمل بها الأحداث الختامية:

Window.addWindowClosingHandler(new Window.ClosingHandler()
{
 @Override
 public void onWindowClosing(ClosingEvent event)
 {
  event.setMessage("Are you sure?");
 }
});

ثم يعطي GWT المستخدم فرصة لأقول نعم أو لا. بالطبع يمكنك أيضا إضافة اختبار في هناك لمعرفة ما إذا كان لديهم أي بيانات غير محفوظة أو ما تريد. عدم تحديد الرسالة أو إعداده إلى NULL لا يفعل أي شيء.

الطريقة للقيام بذلك هي استخدام Window.addWindowClosingHandler مثل carnell و billyons قال. لكنني استخدم تقنية إضافية للكشف عن ما إذا كان المستعرض مغلقا أو إذا تم زيارة الصفحة مرة أخرى (من خلال تحديث أو إبداء الملاحة).

بعد هناك فئة فائدة يمكن أن تساعدك. فقط اتصل بالطابق أدناه في onModuleLoad لاختبار.

مثال استخدام:

@Override
public void onModuleLoad() {
    if (BrowserCloseDetector.get().wasClosed()) {
        GWT.log("Browser was closed.");
    }
    else {
        GWT.log("Refreshing or returning from another page.");
    }
}

فئة المرافق:

import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.Window;

public class BrowserCloseDetector {
    private static final String COOKIE = "detector";
    private static BrowserCloseDetector instance;

    private BrowserCloseDetector() {
        Window.addWindowClosingHandler(new Window.ClosingHandler() {
            public void onWindowClosing(Window.ClosingEvent closingEvent) {
                Cookies.setCookie(COOKIE, "");
            }
        });
    }

    public static BrowserCloseDetector get() {
        return (instance == null) ? instance = new BrowserCloseDetector() : instance;
    }

    public boolean wasClosed() {
        return Cookies.getCookie(COOKIE) == null;
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top