উত্তর:
ব্যবহার onunload
আপনাকে বার্তা প্রদর্শন করতে দেয় তবে নেভিগেশনে বাধা দেবে না (কারণ এটি অনেক দেরি হয়ে গেছে)। তবে, ব্যবহারের onbeforeunload
ফলে নেভিগেশন ব্যহত হবে:
window.onbeforeunload = function() {
return "";
}
দ্রষ্টব্য: একটি খালি স্ট্রিং ফিরিয়ে দেওয়া হয়েছে কারণ নতুন ব্রাউজারগুলি "যে কোনও সংরক্ষণ না করা পরিবর্তনগুলি হারিয়ে যাবে" এর মতো বার্তা সরবরাহ করে যা ওভাররাইড করা যায় না।
পুরানো ব্রাউজারগুলিতে আপনি প্রম্পটে প্রদর্শিত বার্তাটি নির্দিষ্ট করতে পারেন:
window.onbeforeunload = function() {
return "Are you sure you want to navigate away?";
}
window.onbeforeunload = function() { return ""; }
এখানে উপস্থাপন করা অন্যান্য পদ্ধতির মতো নয়, এই বিট কোডটি করবে না ব্রাউজারটিকে ব্যবহারকারীকে জিজ্ঞাসা করে যে তিনি ছেড়ে যেতে চান কিনা তা সতর্কতা প্রদর্শন ; পরিবর্তে, এটি ব্রাউজারের স্মৃতি থেকে আনলোড করার সুযোগ পাওয়ার আগেই এটি ডিওএমের সমতুল্য প্রকৃতিটি বর্তমান পৃষ্ঠায় ফিরে যেতে (এবং এভাবে নেভিগেশন বাতিল করতে) ব্যবহার করে।
যেহেতু এটি সরাসরি শর্ট সার্কিট নেভিগেশনের মাধ্যমে কাজ করে, তাই পৃষ্ঠাটি বন্ধ হতে আটকাতে এটি ব্যবহার করা যায় না; তবে এটি ফ্রেম-বুস্টিং অক্ষম করতে ব্যবহার করা যেতে পারে।
(function () {
var location = window.document.location;
var preventNavigation = function () {
var originalHashValue = location.hash;
window.setTimeout(function () {
location.hash = 'preventNavigation' + ~~ (9999 * Math.random());
location.hash = originalHashValue;
}, 0);
};
window.addEventListener('beforeunload', preventNavigation, false);
window.addEventListener('unload', preventNavigation, false);
})();
দাবি অস্বীকার: আপনার কখনই এটি করা উচিত নয়। কোনও পৃষ্ঠায় যদি ফ্রেম-বুস্টিং কোড থাকে তবে দয়া করে লেখকের ইচ্ছাকে সম্মান করুন।
আমি এই সামান্য ভিন্ন সংস্করণ দিয়ে শেষ করেছি:
var dirty = false;
window.onbeforeunload = function() {
return dirty ? "If you leave this page you will lose your unsaved changes." : null;
}
অন্য কোথাও আমি ফর্সাটি ডায়রিটি হয়ে যাওয়ার পরে নোংরা পতাকাটিকে সত্যে সেট করে রেখেছি (বা আমি অন্যথায় নেভিগেট করা রোধ করতে চাই)। এটি ব্যবহারকারীকে নেভিগেশন কনফার্ম করার অনুরোধ জানাবে কিনা তা সহজেই নিয়ন্ত্রণ করতে দেয়।
নির্বাচিত উত্তরের পাঠ্যটির সাথে আপনি রিডান্ট্যান্ট প্রম্পটগুলি দেখতে পাবেন:
আধুনিক অ্যাডএভেন্টলিস্টনার এপিআই ব্যবহার করে আরও আধুনিক ও ব্রাউজারের সামঞ্জস্যপূর্ণ উপায়ে সমতুল্য।
window.addEventListener('beforeunload', (event) => {
// Cancel the event as stated by the standard.
event.preventDefault();
// Chrome requires returnValue to be set.
event.returnValue = '';
});
সূত্র: https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload
event.returnValue
আইমানের উদাহরণে মিথ্যা ফিরিয়ে আপনি ব্রাউজার উইন্ডো / ট্যাব বন্ধ হতে বাধা দেন।
window.onunload = function () {
alert('You are trying to leave.');
return false;
}
JQuery 1.11 এ গৃহীত উত্তরের সমতুল্য:
$(window).on("beforeunload", function () {
return "Please don't leave me!";
});
ওয়েলকোসনিতোর উত্তর unload
ইভেন্টটি ব্যবহার করেছে , যা নেভিগেশন বাতিল করতে জাভাস্ক্রিপ্টের জন্য খুব দেরি হয়ে যায়।
অননলোড ব্যবহার করুন ।
JQuery এর জন্য, আমি মনে করি এটি এর মতো কাজ করে:
$(window).unload(function() {
alert("Unloading");
return falseIfYouWantToButBeCareful();
});
unload
ব্যবহারকারী পৃষ্ঠাটি ছাড়ার সময় ইভেন্টটি আগুন beforeunload
ধরিয়ে দেয়, এর আগে যেমন আগুন জ্বলে (এবং বাতিল হতে পারে)
প্রস্তাবিত ত্রুটি বার্তাটি ব্রাউজারটি ইতিমধ্যে প্রদর্শিত ত্রুটি বার্তার নকল করতে পারে। ক্রোমে, একই উইন্ডোতে একের পর এক দুটি অনুরূপ ত্রুটি বার্তা প্রদর্শিত হয়।
ক্রোমে, কাস্টম বার্তার পরে প্রদর্শিত পাঠ্যটি হ'ল: "আপনি কি নিশ্চিত যে আপনি এই পৃষ্ঠাটি ছেড়ে যেতে চান?" ফায়ারফক্সে এটি আমাদের কাস্টম ত্রুটি বার্তাটি মোটেও প্রদর্শন করে না (তবে এখনও ডায়ালগটি প্রদর্শন করে)।
আরও উপযুক্ত ত্রুটি বার্তা হতে পারে:
window.onbeforeunload = function() {
return "If you leave this page, you will lose any unsaved changes.";
}
বা স্ট্যাকওভারফ্লো স্টাইল: "আপনি কোনও পোস্ট লেখার বা সম্পাদনা শুরু করেছেন।"
আপনি যদি কোনও ব্রাউজারটিকে পিছনে / ফরোয়ার্ড বোতামটি ধরে থাকেন এবং নেভিগেট করতে চান না, আপনি ব্যবহার করতে পারেন:
window.addEventListener('popstate', function() {
if (window.location.origin !== 'http://example.com') {
// Do something if not your domain
} else if (window.location.href === 'http://example.com/sign-in/step-1') {
window.history.go(2); // Skip the already-signed-in pages if the forward button was clicked
} else if (window.location.href === 'http://example.com/sign-in/step-2') {
window.history.go(-2); // Skip the already-signed-in pages if the back button was clicked
} else {
// Let it do its thing
}
});
অন্যথায়, আপনি পূর্ববর্তী লোড ইভেন্টটি ব্যবহার করতে পারেন , তবে বার্তাটি ক্রস ব্রাউজারে কাজ করতে পারে বা নাও করতে পারে এবং একটি বিল্ট-ইন প্রম্পট জোর করে এমন কিছু প্রত্যাবর্তনের প্রয়োজন।