باستخدام JavaScript لإعادة تعيين علامة التعريف لمنعها من منعش الصفحة

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

سؤال

لدينا تطبيق إرث (مزيج من ASP الكلاسيكي و ASP.NET) الذي يحتوي على عدد قليل من محتوى AJAX الصفحات الغنية. التوقع هو أن مستخدمي الموقع يقومون بتنفيذ مجموعة من المهام على الصفحة التي يمكن أن تمتد إلى كمية عادلة من الوقت ، 15-30 دقيقة.

يتم تسجيل إحدى المتطلبات أن المستخدمين الذين يقومون بتسجيل الدخول إلى الموقع يتم تسجيل الدخول تلقائيا بعد 15 دقيقة من عدم النشاط. يتم حاليا تحقيق ذلك باستخدام علامات التعريف لإعادة توجيه المستخدم إلى صفحة تسجيل الخروج بعد 15 دقيقة من عدم النشاط في الصفحة.

<meta name='Refresh' http-equiv="Refresh" content="900;URL=/someurl/logout.asp">

المشكلة التي نواجهها هي أن المتصفح لا يعتقد أنه كان هناك أي نشاط على الصفحة على الرغم من وجود العديد من تفاعلات AJAX مع الخادم. لذلك بعد 15 دقيقة من ما يفكر فيه المتصفح باعتباره عدم النشاط، يتم تسجيل المستخدم تلقائيا حتى لو كانت في منتصف القيام بشيء ما.

مستوحاة من هذا رسالة مكتب البريد حاولنا إصلاح الانزعاج باستخدام JavaScript (jQuery) مثل

سيكون أدناه معالج حدث مثل النقر فوق حفظ على الصفحة وما إلى ذلك. للحصول على البساطة هنا هو تحميل الصفحة لتعديل وقت التحديث إلى 5 ثوان

$(document).ready(function() {
    var selector = 'meta[name=Refresh]';
    var content = $(selector).attr("content"); //"900;URL=/someurl/logout.asp"
    $(selector).attr("content", "5;URL=/someurl/logout.asp"); 
});

إن كائن (إعادة) إعداد محتوى علامة التعريف سيتم إعادة تعيين مؤقت تحديث الصفحة. لسوء الحظ، يبدو أن هذا لا يعمل (في IE).

نظرا لأن هذا هو تطبيق إرث، فإن بعض المقررات IE استخدام علامات التوطية وما إلى ذلك. والسؤال هو، هل هناك طريقة للحصول على تحديث علامة التعريف مع التعايش السلمي مع تطبيق AJAX؟ هل أفعل شيئا خاطئا وهناك طريقة لحل هذه المشكلة؟

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

المحلول

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

استبدل علامة التعريف الخاصة بك مع هذا:

<script type="text/javascript">
    window.onload = function(){
        var timer = null,
            time=1000*60*15, // 15 minutes
            checker = function(){
                if(timer){clearTimeout(timer);} // cancels the countdown.
                timer=setTimeout(function() { 
                    document.location="/someurl/logout.asp";
                },time); // reinitiates the countdown.
            };
        checker(); // initiates the countdown.
        // requires jQuery... (you could roll your own jQueryless version pretty easily though)
        if(window.jQuery){
            // bind the checker function to user events.
            jQuery(document).bind("mousemove keypress click", checker);
        }
    };
</script>
<noscript>
    <meta name="Refresh" http-equiv="Refresh" content="900;URL=/someurl/logout.asp">
</noscript>

هناك بالتأكيد طرق أفضل للقيام بذلك. مثل خدمة 2 صفحات ... واحدة للمستخدمين مع جافا سكريبت وواحد دون.

أو مجرد تعطيل التطبيق للأشخاص دون جافا سكريبت. : س)

يحرروفقا لهذه الصفحة: http://www.google.com/support/forum/p/webmasters/Thread؟tid=25c023fea4ea60a4&hl=an يجب أن يعمل تحديث التعريف داخل العنصر الأرقيم.

نصائح أخرى

لا أعتقد أن هناك طريقة لإيقاف تحديث التعريف. يمكنك تغيير علامة التعريف، لكن المتصفح قد قرر بالفعل أنه ستحديث في 15 دقيقة؛ لا يوجد API لوقف ذلك.

إذا لم تتمكن من إيقاف التحديث أو استخدام جافا سكريبت للقيام بإعادة التوجيه، فربما يمكن أن تحتوي على الضرر:

$(window).unload(function() { 
  // Insert code here 
  // to save the user's work.
  alert('Sorry, you have to log out now.')
}); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top