منع onbeforeunload من الاتصال عند النقر على رابط mailto

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

  •  20-09-2019
  •  | 
  •  

سؤال

هل هناك أي طريقة لمنع استدعاء onbeforeunload عند النقر على mailto link في chrome.في FF، Safari، IE يعمل بشكل جيد.

<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js">
        google.load("jquery", "1.3.2");
    </script>

    <script type="text/javascript">
        $(document).ready(function(){
            window.onbeforeunload = confirmExit;
        });

        function confirmExit() {
            return "Are you sure?";
        }
    </script>
</head>
<body>
    <a href="mailto:someone@somewhere.com?subject=test mail&body=Hello%20World">Mail Link</a>
</body>
</html>
هل كانت مفيدة؟

المحلول

وماذا عن الحل؟

$(document).ready(function(){
    mailtoClicked = false;
    window.onbeforeunload = confirmExit;
    //Test if browser is Chrome
    if (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) {
        $('a[href^=mailto]').click(function() {mailtoClicked = true;});
    }
});

function confirmExit() {
    if (!mailtoClicked) {
        return "Are you sure?";
    } else {
        mailtoClicked = false;
    }
}

تجريبي .

نصائح أخرى

فيما يلي الحلول المقترحة التي تبدو معقولة

http://www.ilovebonnie.net/2009/09/23/how-to-use-onbeforeunload-with-form-submit-buttons/


تحديث (الرابط ميت) - المحتويات المنسوخة من ذاكرة التخزين المؤقت لـ Google

كيفية استخدام onbeforeunload مع أزرار إرسال النموذج

23 سبتمبر، 2009 — غريب الأطوار

أثناء قيامي ببعض البرمجة واجهت مأزقًا مثيرًا للاهتمام.على الرغم من أنني أفهم أنه من الشر أن نجعل من الصعب على المستخدم مغادرة الصفحة، فأنا لست هنا لأجادل حول مزايا (أو عدم وجودها) قبل التحميل.

في نموذج معين، نجبر المتصفح على عدم تخزين المعلومات مؤقتًا لتجنب مشكلات AJAX/JavaScript المحتملة إذا كان عليهم مغادرة النموذج والعودة لأن المتصفحات لا تعمل جميعها بنفس الطريقة (على سبيل المثال، يترك IE مربعات الاختيار محددة ولكن لا تذكر التغييرات التي حدثت للصفحة بسبب JavaScript).وعلى هذا النحو، فإننا نحذر مستخدمينا عندما يكونون على وشك مغادرة نموذج الطلب لإعلامهم بأنهم سيحتاجون إلى ملئه مرة أخرى.

كانت الوظيفة بسيطة بما فيه الكفاية:

window.onbeforeunload = function () {
    return "You are about to leave this order form. You will lose any information...";
}

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

// Create a variable that can be set upon form submission
var submitFormOkay = false;
window.onbeforeunload = function () {
    if (!submitFormOkay) {
        return "You are about to leave this order form. You will lose any information...";
    }
}

نظرًا لأن onclick يبدو أنه مسجل قبل onsubmit عند النقر فوق زر إرسال، فيمكننا إضافة إعلان متغير صغير إلى زر الإرسال الخاص بنا بحيث يتم تعيين SubmitFormOkay على true قبل إرسال النموذج:

<input type="submit" id="submit_button" onclick="submitFormOkay = true;">
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top