JQuery / জাভাস্ক্রিপ্ট ব্যবহার করে পৃষ্ঠা রিফ্রেশের যে কোনও ফর্ম প্রতিরোধ করুন


94

একবার ব্যবহারকারী আমার পৃষ্ঠায় আসবে, আমি চাই না যে তিনি পৃষ্ঠাটি রিফ্রেশ করুন।

  1. যে কোনও সময়, ব্যবহারকারীর F5উপরের টিপুন বা রিফ্রেশ বোতামটি। তার সতর্কতা পাওয়া উচিত should

    আপনি পৃষ্ঠাটি রিফ্রেশ করতে পারবেন না।

  2. এছাড়াও যদি ব্যবহারকারী কোনও নতুন ট্যাব খোলে এবং পূর্ব ট্যাবে একই url অ্যাক্সেস করার চেষ্টা করে তবে তার একটি সতর্কতা পাওয়া উচিত

    আপনি একই ট্যাব 2 টি ট্যাবে খুলতে পারবেন না

যাইহোক আমি জাভাস্ক্রিপ্ট বা jQuery ব্যবহার করে এটি করতে পারি? পয়েন্ট এক সত্যই গুরুত্বপূর্ণ।


আপনি ব্রডকাস্ট চ্যানেল এপিআই ব্যবহার করে সনাক্ত করতে পারেন ( বিকাশকারী.মোজিলা.আর.ইন- ইউএস / ডকস / ওয়েব / এপিআই / ব্রডকাস্ট_চ্যানেল_এপি ) এবং ট্যাবগুলির মধ্যে কথোপকথনের জন্য ছবি পাঠাতে পারেন। এইগুলি ব্যবহার করে আপনি একই url সহ একাধিক ট্যাব সনাক্ত করতে পারেন এবং অন্যান্য ট্যাবগুলি ব্লক করতে পারেন।
aeXuser264 15

উত্তর:


197

# 1 এর মাধ্যমে প্রয়োগ করা যেতে পারে window.onbeforeunload

উদাহরণ স্বরূপ:

<script type="text/javascript">
    window.onbeforeunload = function() {
        return "Dude, are you sure you want to leave? Think of the kittens!";
    }
</script>

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

# 2 কম-বেশি অসম্ভব। এমনকি আপনি সেশন এবং ব্যবহারকারীর লগইনগুলি ট্র্যাক করলেও আপনি এখনও কোনও গ্যারান্টি দিতে পারবেন না যে আপনি দ্বিতীয় ট্যাবটি সঠিকভাবে সনাক্ত করছেন। উদাহরণস্বরূপ, সম্ভবত আমার একটি উইন্ডো খোলা আছে, তবে এটি বন্ধ করুন। এখন আমি একটি নতুন উইন্ডো খুলছি। আমি সম্ভবত এটি প্রথম ট্যাবটি বন্ধ করে দিলেও এটি সম্ভবত দ্বিতীয় ট্যাব হিসাবে সনাক্ত করবে। এখন আপনার ব্যবহারকারী প্রথম উইন্ডোটি অ্যাক্সেস করতে পারবেন না কারণ তারা এটি বন্ধ করে দিয়েছে এবং তারা দ্বিতীয় উইন্ডোটি অ্যাক্সেস করতে পারে না কারণ আপনি তাদের অস্বীকার করছেন।

আসলে, আমার ব্যাংকের অনলাইন সিস্টেমটি # 2 করার জন্য সত্যিকারের চেষ্টা করে এবং উপরে বর্ণিত পরিস্থিতি সর্বদা ঘটে। আমি আবার ব্যাঙ্কিং সিস্টেমটি ব্যবহার করার আগে সার্ভার সাইড সেশনটির মেয়াদ শেষ না হওয়া পর্যন্ত আমাকে সাধারণত অপেক্ষা করতে হয়।


4
কেবলমাত্র একটি নোট যে অন্বেষিত ফাইলটি অপেরা ব্রাউজারের সংস্করণগুলিতে উপলভ্য নয়।
উইলিকর্নব্রেড

4
ব্যবহারকারী যদি পৃষ্ঠায় থাকতে বেছে নেন তবে কিছু করার উপায় আছে কি?
ishষিপি 89

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

আমি জানি এই প্রশ্নটি পুরানো তবে তারা যদি সত্যিই একাধিক সেশন আটকাতে চেয়েছিল তবে তারা কি ওয়েবসকেটগুলি ব্যবহার করতে পারে?
মেঘান

4
@ শিয়ান - হ্যাঁ ... আপনি যদি সত্যিই একাধিক সেশন আটকাতে চান। একটি ওয়েবসকেট স্থিতিশীল, দ্বিপাক্ষিক যোগাযোগ করতে পারে। ওয়েবস্কট সংযুক্ত থাকাকালীন ক্লায়েন্ট (সম্ভবত) হঠাৎ করে অন্য কারও হয়ে উঠছে না, সুতরাং আপনার সেই ব্যবহারকারীকে একটি টোকন বরাদ্দ করতে সক্ষম হওয়া উচিত, এবং সকেটটি বন্ধ হয়ে গেলে এটি পরিষ্কার করা উচিত। তবে, এটি ব্যবহারকারী এজেন্টের প্রত্যাশিত আচরণের আশেপাশে হ্যাক করছে, সুতরাং এটি সম্ভবত খারাপ ইউএক্স। আমি অত্যন্ত কয়েকটি ক্ষেত্রে ভাবতে পারি যেখানে এই জাতীয় কিছু উপযুক্ত হবে (সম্ভবত কোনও অনলাইন গেম - কাউকে দুই স্তরের ৩ 37 টি মৃত্যুর নখ হিসাবে লগ ইন করা থেকে বিরত রাখতে ...)।
শেঠ

34

আপনি ব্যবহারকারীকে সতেজ হওয়া থেকে বিরত রাখতে পারবেন না, না আপনার সত্যিই চেষ্টা করা উচিত। আপনার কেন এই সমাধানের প্রয়োজন তা ফিরে যাওয়া উচিত, এখানে মূল সমস্যাটি কী ?. সমস্যাটি সমাধান করার জন্য সেখানে শুরু করুন এবং আলাদা উপায় সন্ধান করুন। সম্ভবত আপনি কীভাবে আপনার এটি করা দরকার তা বিশদভাবে ব্যাখ্যা করেছেন যাতে এটি এরকম সমাধান খুঁজে পেতে সহায়তা করবে।

মৌলিক ব্রাউজারের বৈশিষ্ট্যগুলি ভাঙা কখনই ভাল ধারণা নয়, ইন্টারনেটের 99.999999999% এরও বেশি F5 দিয়ে কাজ করে এবং সতেজ করে তোলে এটি ব্যবহারকারীর প্রত্যাশা , আপনার ভাঙা উচিত নয়।


সমস্যাটি হ'ল পৃষ্ঠাটি একটি সিবেল অ্যাপ্লিকেশন। এবং যখন কোনও ব্যবহারকারী কোনও সেশনে থাকে এবং রিফ্রেশটি হিট করে তখন একটি নতুন সেশন তৈরি হয় এবং অ্যাপটি ক্র্যাশ হয়ে যায়। সুতরাং আমার রিফ্রেশ করতে সক্ষম না হওয়া প্রয়োজন।
পঙ্কজ

21
@ পঙ্কজ - এটি অ্যাপ্লিকেশন সাইটে ঠিক করা উচিত এবং কুকিজ উদাহরণস্বরূপ যাতে ব্যবহারকারীরা ট্যাবগুলি জুড়ে সেশনটি ভাগ করে নেন।
নিক ক্র্যাভার

9
আপনি এখান থেকে আসছেন তা আমি নিশ্চিত নই। ইন্টারনেটে অগণিত সাইটগুলি ব্রাউজারের রিফ্রেশ প্রতিরোধ করে যদি আপনার এমন ফর্ম থাকে যা নোংরা হয়, আপনাকে সতর্ক করে দেয় যে আপনি আপনার পরিবর্তনগুলি হারাতে পারেন। কেন এটি "মৌলিক ব্রাউজারের বৈশিষ্ট্যগুলি ভঙ্গ করছে" তা নিশ্চিত নয়।
সিরিরিস

4
@ সিরিস: হুবহু এছাড়াও, আমি একটি ব্যক্তিগত অ্যাপ্লিকেশন তৈরি করছি যা ব্যবহারকারীর নিজের ব্যক্তিগত নেটওয়ার্কে না থাকলেও ব্যবহার করতে সক্ষম হবেন বলে মনে করা হচ্ছে। তাই আমি অফলাইনে ব্যবহারের জন্য ব্রাউজার স্টোরেজে সমস্ত কিছু সঞ্চয় করি তবে তিনি পৃষ্ঠাটি পুনরায় লোড করলে পুরো অ্যাপ্লিকেশনটি চলে যায় is এটি খুব "স্বাভাবিক" নাও হতে পারে, তবে এই আধুনিক আইটি বিশ্বে এটি আরও বেশি হয়ে উঠবে।
cslotty

17

যদিও এটি F5 কীটি অক্ষম করা ভাল ধারণা নয় তবে আপনি নীচের মতো এটি JQuery এ করতে পারেন।

<script type="text/javascript">
function disableF5(e) { if ((e.which || e.keyCode) == 116 || (e.which || e.keyCode) == 82) e.preventDefault(); };

$(document).ready(function(){
     $(document).on("keydown", disableF5);
});
</script>

আশা করি এটি সাহায্য করবে!


30
ওএসএক্সের কী হবে, যেখানে এটি সিএমডি + আর? বা মোবাইল যেখানে টিপতে একটি বোতাম আছে? আমি এটিকে সমাধান হিসাবে দেখছি না
ইতালি প্যালে আলে

14

সিজিআই এর ওলে দিনগুলিতে আমাদের অনেক ফর্ম ছিল যা বিভিন্ন ব্যাকএন্ড ক্রিয়াকলাপকে ট্রিগার করবে। যেমন গোষ্ঠীতে পাঠ্য বিজ্ঞপ্তি, মুদ্রণ কাজ, ডেটা চাষ ইত্যাদি

ব্যবহারকারী যদি এমন কোনও পৃষ্ঠায় থাকেন যা বলছিল যে "দয়া করে অপেক্ষা করুন ... কিছু বিশাল কাজ সম্পাদন করা যা কিছুটা সময় নিতে পারে"। তারা রিফ্রেশ করার সম্ভাবনা বেশি ছিল এবং এটি খারাপ হবে!

কেন? কারণ এটি আরও ধীরগতির কাজগুলিকে ট্রিগার করবে এবং শেষ পর্যন্ত পুরো জিনিসটিকে ছুঁড়ে ফেলবে।

সমাধান? তাদের ফর্মটি করার অনুমতি দিন। যখন তারা তাদের ফর্ম জমা দেয় ... আপনার কাজ শুরু করুন এবং তারপরে তাদের অন্য পৃষ্ঠায় ডাইরেক্ট করুন যা তাদের অপেক্ষা করতে বলে।

যেখানে মাঝখানে পৃষ্ঠাগুলি আসলে ফর্ম ডেটা ধারণ করেছিল যা কাজ শুরু করার জন্য প্রয়োজনীয় ছিল। WAIT পৃষ্ঠায় একটি জাভাস্ক্রিপ্ট ইতিহাস ধ্বংস রয়েছে। সুতরাং তারা সেই পৃষ্ঠার অপেক্ষারতটি আবারও দেখতে পাবে এবং এটি ব্যাকগ্রাউন্ডে শুরু করার জন্য এটি কখনই মূল কাজটি ট্রিগার করবে না কারণ ওয়েট পৃষ্ঠায় কেবল ওয়েটটির জন্য প্রয়োজনীয় ফর্ম ডেটা রয়েছে।

আশা করি তা বোধগম্য হয়।

ইতিহাস ধ্বংস ফাংশন তাদের পিছনে ক্লিক করতে এবং তারপরে ততোধিক তাড়িত করতে বাধা দেয়।

এটি খুব বিরামবিহীন ছিল এবং অলাভজনক ক্ষতিগ্রস্থ না হওয়া অবধি বহু বছর ধরে দুর্দান্ত কাজ করেছে।

উদাহরণ: ফর্ম Tোকান - তাদের সমস্ত তথ্য সংগ্রহ করুন এবং জমা দেওয়ার পরে এটি আপনার ব্যাকএন্ড কাজ শুরু করে।

ফর্ম এন্ট্রি থেকে প্রতিক্রিয়া - এইচটিএমএল ফিরিয়ে দেয় যা আপনার স্ট্যাটিক ওয়েট পৃষ্ঠায় এবং / অথবা পোষ্ট / জিইটি অন্য ফর্মটিতে (ডাব্লুএইআইটি পৃষ্ঠা) ফেরত দেয় per

অপেক্ষার পৃষ্ঠা - সর্বাধিক সাম্প্রতিক ইতিহাসকে ধ্বংস করার জন্য কেবল অপেক্ষা পৃষ্ঠার সাথে সম্পর্কিত জাভাস্ক্রিপ্ট সম্পর্কিত ফোরাম তথ্য রয়েছে। (-1 OR -2) কেবলমাত্র সর্বাধিক সাম্প্রতিক পৃষ্ঠাগুলি নষ্ট করতে পছন্দ করুন তবে তারপরেও তাদের তাদের মূল ফর্ম প্রবেশের পৃষ্ঠায় ফিরে যেতে দেয়।

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

যদি তারা ম্যানুয়ালি রিফ্রেশ করে ... তারা সেখানে তাদের কাজের স্থিতির আরও একটি চেক যুক্ত করছে।

আশা করি এইটি কাজ করবে. শুভকামনা।


4
আপনি এই আশ্চর্যজনক এবং তথ্যবহুল উত্তরের জন্য যথেষ্ট ক্রেডিট পান নি। ধন্যবাদ!!
শাইনিংলাইট

4

না, নেই।

আমি নিশ্চিত যে জেএস থেকে রিফ্রেশ বোতামে ক্লিক বাধা দেওয়ার কোনও উপায় নেই এবং এমনকি যদি থাকত তবে জেএস বন্ধ করা যায়।

আপনার সম্ভবত আপনার এক্স থেকে সরে আসা (সতেজকরণ প্রতিরোধ করা) এবং ওয়াইয়ের (যা কিছু যাই হোক না কেন) এর আলাদা সমাধান খুঁজে পাওয়া উচিত।


3

# 2 ইস্যুটি এখন ব্রডকাস্টএপিআই ব্যবহার করে সমাধান করা যেতে পারে ।

এই মুহুর্তে এটি কেবল ক্রোম, ফায়ারফক্স এবং অপেরাতে উপলভ্য।

var bc = new BroadcastChannel('test_channel');

bc.onmessage = function (ev) { 
    if(ev.data && ev.data.url===window.location.href){
       alert('You cannot open the same page in 2 tabs');
    }
}

bc.postMessage(window.location.href);

2

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

তবে, আরও ভাল সমাধান হ'ল গুগল ডক্সের মতো সম্ভব হলে দুটি সেশন সিঙ্ক্রোনাইজ করা।

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