জাভাস্ক্রিপ্ট ব্যবহার করে নেভিগেট করা থেকে কোনও ওয়েবপৃষ্ঠা প্রতিরোধ করুন


129

কীভাবে কোনও ওয়েবপৃষ্ঠাটি জাভাস্ক্রিপ্ট ব্যবহার করে নেভিগেট করা থেকে রোধ করবেন?


এই পৃষ্ঠাটি কীভাবে দূরে সরিয়ে নেবে?
নিয়াজ

9
প্রশ্ন অনুসারে, জাভাস্ক্রিপ্ট এটিকে নেভিগেট করে তোলে ...
Shog9


@ শোগ 9 এটি ট্যাবটি বন্ধ করে দিলে এটি চলাচল করে। আমার তর্জনী Tha ... করেনি
বব স্টেইন

উত্তর:


159

ব্যবহার onunloadআপনাকে বার্তা প্রদর্শন করতে দেয় তবে নেভিগেশনে বাধা দেবে না (কারণ এটি অনেক দেরি হয়ে গেছে)। তবে, ব্যবহারের onbeforeunloadফলে নেভিগেশন ব্যহত হবে:

window.onbeforeunload = function() {
  return "";
}

দ্রষ্টব্য: একটি খালি স্ট্রিং ফিরিয়ে দেওয়া হয়েছে কারণ নতুন ব্রাউজারগুলি "যে কোনও সংরক্ষণ না করা পরিবর্তনগুলি হারিয়ে যাবে" এর মতো বার্তা সরবরাহ করে যা ওভাররাইড করা যায় না।

পুরানো ব্রাউজারগুলিতে আপনি প্রম্পটে প্রদর্শিত বার্তাটি নির্দিষ্ট করতে পারেন:

window.onbeforeunload = function() {
  return "Are you sure you want to navigate away?";
}

11
ব্রাউজারটি একটি উপযুক্ত প্রম্পট প্রদর্শন করবে। সহজভাবে ব্যবহার করুনwindow.onbeforeunload = function() { return ""; }
কিম তাইজিগন

তবে এটি যথেষ্ট নয়। ফর্মের ভিতরে নিয়ন্ত্রণগুলি সম্পর্কে কী বলা যায়? তারা এটিকেও ট্রিগার করে।
Fandango68

1
আধুনিক ব্রাউজারগুলি আপনাকে প্রম্পটে একটি কাস্টম বার্তা প্রদর্শন করতে দেয় না, কারণ এটি ফিশার এবং এর মতো অপব্যবহার করেছে।
ফ্লিম

ধন্যবাদ @ ফ্লিম, আমি উত্তরটি আপডেট করেছি যাতে এটি বর্তমান ব্রাউজারগুলির জন্য এখন সঠিক।
জিমি আর। হাউসস

@ ফ্লিমি অনলাইন ব্যবহারকারীরা ব্রাউজার ট্যাব বা ব্রাউজার বন্ধ করার সময় ব্যবহারকারীকে অনলাইন স্ট্যাটাস আপডেট করতে চাই। আমি সমাধানটিতে কোডটি ব্যবহার করেছি তবে এটি কার্যকর হয়নি thisএর জন্য কোনও সমাধান আছে কি?
নাসিম্বা

23

এখানে উপস্থাপন করা অন্যান্য পদ্ধতির মতো নয়, এই বিট কোডটি করবে না ব্রাউজারটিকে ব্যবহারকারীকে জিজ্ঞাসা করে যে তিনি ছেড়ে যেতে চান কিনা তা সতর্কতা প্রদর্শন ; পরিবর্তে, এটি ব্রাউজারের স্মৃতি থেকে আনলোড করার সুযোগ পাওয়ার আগেই এটি ডিওএমের সমতুল্য প্রকৃতিটি বর্তমান পৃষ্ঠায় ফিরে যেতে (এবং এভাবে নেভিগেশন বাতিল করতে) ব্যবহার করে।

যেহেতু এটি সরাসরি শর্ট সার্কিট নেভিগেশনের মাধ্যমে কাজ করে, তাই পৃষ্ঠাটি বন্ধ হতে আটকাতে এটি ব্যবহার করা যায় না; তবে এটি ফ্রেম-বুস্টিং অক্ষম করতে ব্যবহার করা যেতে পারে।

(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);
})();

দাবি অস্বীকার: আপনার কখনই এটি করা উচিত নয়। কোনও পৃষ্ঠায় যদি ফ্রেম-বুস্টিং কোড থাকে তবে দয়া করে লেখকের ইচ্ছাকে সম্মান করুন।


ব্যবহারকারী কীভাবে বন্ধ ব্রাউজার চান (মডেল বন্ধ করুন ক্লিক করুন)? এটা সত্যিই?

15

আমি এই সামান্য ভিন্ন সংস্করণ দিয়ে শেষ করেছি:

var dirty = false;
window.onbeforeunload = function() {
    return dirty ? "If you leave this page you will lose your unsaved changes." : null;
}

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

নির্বাচিত উত্তরের পাঠ্যটির সাথে আপনি রিডান্ট্যান্ট প্রম্পটগুলি দেখতে পাবেন:

এখানে চিত্র বর্ণনা লিখুন


3
আইইতে যদি নোংরাটি মিথ্যা হয় তবে একটি স্ট্রিং 'নাল' প্রদর্শিত হবে। এটি একটি বিবৃতি ভিতরে কেবল মোড়ানো। দেখুন: স্ট্যাকওভারফ্লো.com
জ্যাকব ভ্যান লিনজেন

@ জ্যাকোভানলিনজেন সম্মত, এটি নাল পরিবর্তে শেষ হয়ে গেলে এখানে এবং অন্য তিনটি প্রশ্নের সেরা উত্তর হবে । (1) এটি শর্তসাপেক্ষ (২) এটি নেভিগেটকে বাধা দেওয়ার সবচেয়ে সাধারণ বৈধ কারণ এবং (3) এর স্ক্রিনশট রয়েছে "নোংরা" হিসাবে উল্লেখ করেছে। undefined
বব স্টেইন

সমস্ত ব্রাউজারগুলিতে এটি কি কাজটি বাতিল হয়ে যাওয়ার পরিবর্তে অপরিজ্ঞায়িত হয়ে শেষ হলে?
বিপদ

9

আধুনিক অ্যাডএভেন্টলিস্টনার এপিআই ব্যবহার করে আরও আধুনিক ও ব্রাউজারের সামঞ্জস্যপূর্ণ উপায়ে সমতুল্য।

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


1
সঠিকভাবে পুঁজিতে করতে মনে রাখুনevent.returnValue
Flimm

7

আইমানের উদাহরণে মিথ্যা ফিরিয়ে আপনি ব্রাউজার উইন্ডো / ট্যাব বন্ধ হতে বাধা দেন।

window.onunload = function () {
  alert('You are trying to leave.');
  return false;
}

2
ব্রাউজার অপেরা না হলে, যদি ট্যাব / উইন্ডো / প্রোগ্রামটি বন্ধ হয়ে থাকে তবে অননলোড ইভেন্টটি এড়িয়ে যায়।
পাওয়ারলর্ড

5

JQuery 1.11 এ গৃহীত উত্তরের সমতুল্য:

$(window).on("beforeunload", function () {
    return "Please don't leave me!";
});

জেএসফিডেলের উদাহরণ

ওয়েলকোসনিতোর উত্তর unloadইভেন্টটি ব্যবহার করেছে , যা নেভিগেশন বাতিল করতে জাভাস্ক্রিপ্টের জন্য খুব দেরি হয়ে যায়।


3

অননলোড ব্যবহার করুন ।

JQuery এর জন্য, আমি মনে করি এটি এর মতো কাজ করে:

$(window).unload(function() { 
  alert("Unloading"); 
  return falseIfYouWantToButBeCareful();
});

মিথ্যা প্রত্যাবর্তন দুর্ভাগ্যক্রমে আনলোডটি বাতিল করবে না - unloadব্যবহারকারী পৃষ্ঠাটি ছাড়ার সময় ইভেন্টটি আগুন beforeunloadধরিয়ে দেয়, এর আগে যেমন আগুন জ্বলে (এবং বাতিল হতে পারে)
জিম্বো

@ অ্যাল্টকগনিটো: আপনি আমাকে মিথ্যা আইফাউটওয়ানটটোবটব্যাকরেফুল () দিয়ে ভাল ধারণা দিয়েছেন এখন আমি আইই বা এফএফের দেওয়া ডিফল্ট পপ আপ এড়াতে পারি। তবে ক্রোমের জন্য এটি কাজ করছে না। এটি খতিয়ে দেখছি।
user367134

3

প্রস্তাবিত ত্রুটি বার্তাটি ব্রাউজারটি ইতিমধ্যে প্রদর্শিত ত্রুটি বার্তার নকল করতে পারে। ক্রোমে, একই উইন্ডোতে একের পর এক দুটি অনুরূপ ত্রুটি বার্তা প্রদর্শিত হয়।

ক্রোমে, কাস্টম বার্তার পরে প্রদর্শিত পাঠ্যটি হ'ল: "আপনি কি নিশ্চিত যে আপনি এই পৃষ্ঠাটি ছেড়ে যেতে চান?" ফায়ারফক্সে এটি আমাদের কাস্টম ত্রুটি বার্তাটি মোটেও প্রদর্শন করে না (তবে এখনও ডায়ালগটি প্রদর্শন করে)।

আরও উপযুক্ত ত্রুটি বার্তা হতে পারে:

window.onbeforeunload = function() {
    return "If you leave this page, you will lose any unsaved changes.";
}

বা স্ট্যাকওভারফ্লো স্টাইল: "আপনি কোনও পোস্ট লেখার বা সম্পাদনা শুরু করেছেন।"


2

আপনি যদি কোনও ব্রাউজারটিকে পিছনে / ফরোয়ার্ড বোতামটি ধরে থাকেন এবং নেভিগেট করতে চান না, আপনি ব্যবহার করতে পারেন:

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
    }
});

অন্যথায়, আপনি পূর্ববর্তী লোড ইভেন্টটি ব্যবহার করতে পারেন , তবে বার্তাটি ক্রস ব্রাউজারে কাজ করতে পারে বা নাও করতে পারে এবং একটি বিল্ট-ইন প্রম্পট জোর করে এমন কিছু প্রত্যাবর্তনের প্রয়োজন।

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