পৃষ্ঠাটি ছাড়ার আগে জাভাস্ক্রিপ্ট


233

ব্যবহারকারী পৃষ্ঠাটি ছাড়ার আগে আমি একটি নিশ্চিতকরণ করতে চাই। যদি তিনি ঠিক বলে থাকেন তবে এটি নতুন পৃষ্ঠায় পুনর্নির্দেশ করবে বা ছেড়ে যেতে বাতিল করবে। আমি অননলোড দিয়ে এটি তৈরি করার চেষ্টা করেছি

<script type="text/javascript">
function con() {
    var answer = confirm("do you want to check our other products")
    if (answer){

        alert("bye");
    }
    else{
        window.location = "http://www.example.com";
    }
}
</script>
</head>

<body onunload="con();">
<h1 style="text-align:center">main page</h1>
</body>
</html>

তবে এটি পৃষ্ঠাটি ইতিমধ্যে বন্ধ হওয়ার পরে নিশ্চিত? কীভাবে এটি সঠিকভাবে করবেন?

এটি আরও ভাল হবে যদি কেউ দেখায় যে কীভাবে এটি jQuery দিয়ে করবেন?


1
হা হা হা ... হ্যাঁ, এটা ঠিক ঠিক আছে ... তবে ভাগ্যক্রমে এটি আমার সাইট নয় ... আমার ক্লায়েন্ট তার পক্ষ থেকে এটি করতে বলছে
kd7

25
হ্যাঁ, তবে আমি যখন কোনও সংরক্ষিত Gmail পৃষ্ঠা ছাড়তে চলেছি তখন আমি এই সতর্কতাগুলি দেখতে সত্যিই খুশি।
এটেডাশাউ

নোট, ফায়ারফক্স উপর 4+ শুধুমাত্র একটি ডিফল্ট বার্তাটি আপনার কাস্টম বার্তা পরিবর্তে প্রদর্শিত হয় developer.mozilla.org/en-US/docs/Web/Events/beforeunload#Notes
baptx

উত্তর:


352

onunload(বা onbeforeunload) ব্যবহারকারীকে অন্য পৃষ্ঠায় পুনর্নির্দেশ করতে পারে না। এই নিরাপত্তার কারণে হয়।

ব্যবহারকারী পৃষ্ঠাটি ছাড়ার আগে যদি আপনি কোনও প্রম্পট দেখাতে চান তবে ব্যবহার করুন onbeforeunload:

window.onbeforeunload = function(){
  return 'Are you sure you want to leave?';
};

বা jQuery সহ:

$(window).bind('beforeunload', function(){
  return 'Are you sure you want to leave?';
});

এটি কেবল ব্যবহারকারীকে পৃষ্ঠাটি ছেড়ে দিতে চায় কিনা তা জিজ্ঞাসা করবে, তারা যদি পৃষ্ঠায় থাকতে চান তবে আপনি সেগুলি পুনর্নির্দেশ করতে পারবেন না। যদি তারা ছেড়ে যেতে বেছে নেয়, ব্রাউজারটি যেখানে যেতে বলেছিল সেখানে যাবে go

onunloadপৃষ্ঠাটি লোড হওয়ার আগে আপনি জিনিসগুলি করতে ব্যবহার করতে পারেন তবে আপনি সেখান থেকে পুনর্নির্দেশ করতে পারবেন না (ক্রোম 14+ ভিতরে সতর্কতাগুলি ব্লক করে onunload):

window.onunload = function() {
    alert('Bye.');
}

বা jQuery সহ:

$(window).unload(function(){
  alert('Bye.');
});

12
@ জোসেফ: আপনি যখন কোনও স্ট্রিং ফিরিয়ে দেন onbeforeunload, ব্রাউজার সেই স্ট্রিংটিকে তার নিজের নিশ্চিতকরণ বাক্সে রাখে। ব্যবহার confirmঅকার্যকর onunloadএবং onbeforeunloadকারণ, কেবল ব্রাউজারটি কোথায় যায় তা নিয়ন্ত্রণ করতে পারে, আপনি নন। এই ডেমোটি দেখুন: jsfiddle.net/3kvAC
রকেট

7
শুধু একটি নোট, যদি আপনি শর্তসাপেক্ষে একটি বার্তা প্রদর্শন করাতে চান onbeforeunload, return falseব্রাউজার দেখান "মিথ্যা" একটি ডায়ালগে করতে হবে। আপনি return undefinedযদি কোনও ব্যবহারকারীকে সতর্কতা না দিয়ে উইন্ডোটি বন্ধ করতে চান তবে আপনার প্রয়োজন ।
ড্যান ফিচ

5
@ অ্যাডাম: ফায়ারফক্স এই বার্তাটির নিজস্বকরণটি বাতিল করার সিদ্ধান্ত নিয়েছে। এটি ব্রাউজারের অংশ, সুতরাং আপনি সেই আচরণটিকে ওভাররাইড করতে পারবেন না। অন্যান্য ব্রাউজারগুলিও বার্তাটি কাস্টমাইজ করার ক্ষমতা সরিয়ে ফেলতে পারে। দেখুন: বিকাশকারী.মোজিলা.আর.ইন-
ইউএস / ডকস / ওয়েবে / এপিআই / উইন্ডো এভেন্টহ্যান্ডার্স /

8
@ রকেটহাজম্যাট ক্রোমেরও রয়েছে। এটি এখন কেবল বলে: আপনি কি এই সাইটটি ছেড়ে যেতে চান? আপনার করা পরিবর্তনগুলি সংরক্ষিত নাও হতে পারে।
প্রোগ্রামার

6
@ প্রোগ্রামার ৫০০০ এটি ভাল কারণ কিছু দূষিত ওয়েবসাইটগুলি কিছু অকেজো সতর্কতা প্রদর্শন করতে পারে (উদাহরণস্বরূপ "আপনি আপনার ব্যাঙ্কের তথ্য না দিয়ে ছেড়ে যেতে পারবেন না)"
নমন

34

এই কোডটি যখন আপনি ফর্মের স্থিতি পরিবর্তন করেছেন কিনা তা সনাক্ত করবেন।

$('#form').data('serialize',$('#form').serialize()); // On load save form current state

$(window).bind('beforeunload', function(e){
    if($('#form').serialize()!=$('#form').data('serialize'))return true;
    else e=null; // i.e; if form state change show warning box, else don't show it.
});

আপনি গুগল জিকুয়েরি ফর্ম সিরিয়ালাইজ ফাংশন করতে পারেন, এটি সমস্ত ফর্ম ইনপুট সংগ্রহ করবে এবং এটি অ্যারেতে সংরক্ষণ করবে। আমি অনুমান করি এই ব্যাখ্যা যথেষ্ট যথেষ্ট :)


কোন ধারণা কেন এটি কাজ করবে না? এটি অন্য জেএস ফাংশন / জ্যাকুরি প্লাগইন দ্বারা ওভাররাইট করা যেতে পারে? আমি একটি ওয়েবআরটিসি অ্যাপ চালাচ্ছি এবং ক্লায়েন্ট যখন উইন্ডোটি বন্ধ করে দেয় তখন আমি কিছু স্টাফ "বন্ধ" করতে চাই যাতে উইন্ডোটি বন্ধ করার প্রয়োজন হয়।
হেই

1
এটি অন্য কোনও প্লাগইন ইত্যাদি দ্বারা ওভাররাইট করা যেতে পারে, বেশিরভাগ বিকাশকারী নির্বাচকের সাথে ভুল করেছেন, যদি আপনার ওভাররাইট করা সম্পর্কে সন্দেহ হয় তবে </body> ট্যাগটি বন্ধ করার আগে আপনার jquery কোডটি রাখুন।
ওয়াসিম এ।

হ্যাঁ ... আপনার যদি কিছু জেএস কোড থাকে যা পৃষ্ঠাটি লোড হওয়ার পরে ইনপুট ক্ষেত্রগুলি লুকিয়ে বা অক্ষম করে তবে আপনি যখন লুকানো \ অক্ষম ক্ষেত্রগুলির সাথে তুলনা করার জন্য চেক করেন তখন ক্রমিকায়িত হবে না। চেক অবশ্যই ব্যর্থ হবে। :;) এই কার্যসংক্রান্ত এর stackoverflow.com/a/4748748/114029
Leniel Maccaferri

: যাইহোক ... এখানে একটি ভাল উপায় এর stackoverflow.com/q/16322042/114029
Leniel Maccaferri

1
লক্ষ করা উচিত যে সাবমিট বাটন টিপানোর সময় এটি একটি সতর্কতাও বাড়বে। এটি রোধ করতে সাবমিট বাটনে ক্লিক করে কেউ আবার ফর্মটি সিরিয়ালাইজ করতে পারে।
আদম

19

এটি বর্তমান পৃষ্ঠাটি ছেড়ে যাওয়ার বিষয়ে সতর্ক করবে

<script type='text/javascript'>
function goodbye(e) {
    if(!e) e = window.event;
    //e.cancelBubble is supported by IE - this will kill the bubbling process.
    e.cancelBubble = true;
    e.returnValue = 'You sure you want to leave?'; //This is displayed on the dialog

    //e.stopPropagation works in Firefox.
    if (e.stopPropagation) {
        e.stopPropagation();
        e.preventDefault();
    }
}
window.onbeforeunload=goodbye; 

</script>

13

আমি যখন সংরক্ষণ না করা ডেটা পেয়েছি তখনই আমি নিশ্চিতকরণ বার্তাটি দেখানোর জন্য এটি করেছি

window.onbeforeunload = function () {
            if (isDirty) {
                return "There are unsaved data.";
            }
            return undefined;
        }

"অপরিজ্ঞাত" ফিরিয়ে দেওয়া নিশ্চিতকরণটি অক্ষম করবে

দ্রষ্টব্য: "নাল" ফিরিয়ে দেওয়া IE এর সাথে কাজ করবে না

এছাড়াও আপনি নিশ্চিতকরণটি অক্ষম করতে "অপরিজ্ঞাত" ব্যবহার করতে পারেন

window.onbeforeunload = undefined;

11

ক্রোম 14+ এর সাথে পপআপ করার জন্য আপনাকে নিম্নলিখিতগুলি করতে হবে:

jQuery(window).bind('beforeunload', function(){
    return 'my text';
});

ব্যবহারকারীকে জিজ্ঞাসা করা হবে তিনি কি থাকতে চান বা ছেড়ে যেতে চান।


কোন ধারণা কেন এটি কাজ করছে না? আমি ক্র্যাক (সর্বশেষ সংস্করণ) সাথে জ্যুচুরি প্লাগইনগুলির একটি বুং ব্যবহার করছি তবে উইন্ডোটি বন্ধ করার সময় আমি কোনও সতর্কতা পাই না।
আরে

@ কেন ডাউন ভোট? এটি কাজ করছে .... আপনার অবশ্যই এটির বাইরে থাকা দরকার jQuery(document)এবং আপনার সমস্ত প্লাগইন লোড হওয়ার পরে এটি ঠিক রাখার পরামর্শ দিই। এছাড়াও, এই স্নিপেট কোনও সতর্কতা করে না ... এটি কেবল একটি ডেমো সহ return
ডেভিড বেলঞ্জার

7

পৃষ্ঠাটি ছাড়ার আগে ব্যবহারকারীকে সর্বদা জিজ্ঞাসা করতে আপনি নীচের ওয়ান-লাইনার ব্যবহার করতে পারেন ।

window.onbeforeunload = s => "";

পৃষ্ঠাতে যখন কোনও কিছু সংশোধন করা হয়েছে তখন ব্যবহারকারীকে জিজ্ঞাসা করার জন্য, এই উত্তরটি দেখুন


যদি আমি পৃষ্ঠাটি রিফ্রেশ করি বা কেবল প্রস্থান করি তবে এটি কি আগুনে পোড়াবে?
সি 8

হ্যাঁ, এটি রিফ্রেশ বা প্রস্থান করার সময় আগুন লাগবে।
spencer.sm

এটি কখন পুনরায় রিফ্রেশ হয় যখন এটি প্রথমবারের মতো জানার আছে?
সি 8

কোনও ব্যবহারকারী যখন পৃষ্ঠাটিতে প্রথমবার আসে তখন ব্যবহারকারীরা পৃষ্ঠাটি সতেজ করে তুলছেন।
সি 8

ওহ না. কোনও ব্যবহারকারী প্রথমবারের জন্য পৃষ্ঠায় আসলে এটি বরখাস্ত করা হবে না। কেবল পৃষ্ঠাগুলি বন্ধ বা পরিবর্তন করার সময় বা রিফ্রেশ করার সময়।
spencer.sm

4

সাধারণত আপনি এই বার্তাটি প্রদর্শন করতে চান, যখন ব্যবহারকারী কোনও ফর্মে পরিবর্তন করে, তবে সেগুলি সংরক্ষণ করা হয় না।

কোনও বার্তা দেখানোর জন্য এই পদ্ধতির ব্যবহার করুন, কেবলমাত্র যখন ব্যবহারকারী কিছু পরিবর্তন করে

var form = $('#your-form'),
  original = form.serialize()

form.submit(function(){
  window.onbeforeunload = null
})

window.onbeforeunload = function(){
  if (form.serialize() != original)
    return 'Are you sure you want to leave?'
}


1

আরও কিছুটা সহায়ক, সক্ষমঅক্ষম করুন

$(window).on('beforeunload.myPluginName', false); // or use function() instead of false
$(window).off('beforeunload.myPluginName');

1

এখানকার বেশিরভাগ সমাধান আমার পক্ষে কাজ করে না তাই আমি এখানে পাওয়া একটিটি ব্যবহার করেছি

আমি কনফার্ম বাক্সটির অনুমতি দেওয়ার জন্য একটি পরিবর্তনশীলও যুক্ত করেছি

window.hideWarning = false;
window.addEventListener('beforeunload', (event) => {
    if (!hideWarning) {
        event.preventDefault();
        event.returnValue = '';
    }

});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.