কোনও পৃষ্ঠা রেখে যাওয়ার পরে জাভাস্ক্রিপ্ট সতর্কতাগুলিকে কীভাবে আটকাতে হবে?


12

অনেকগুলি পৃষ্ঠাগুলি সতর্কতা থাকে যখন আপনি এগুলি ছেড়ে যান: আপনি যদি ট্যাবগুলি বন্ধ করে দেন, সংরক্ষণ না করে নেভিগেট করেন ইত্যাদি ইত্যাদি, কোনও সতর্কতা নিশ্চিত না করা পর্যন্ত কোনও সাইট আপনাকে সতর্ক / অবরুদ্ধ করার কারণ রয়েছে, যেমন "আপনি কি নিশ্চিত যে আপনি চান এই পৃষ্ঠা থেকে দূরে নেভিগেট? "।

এটি সাধারণত onbeforeunloadএবং / অথবা onunloadহ্যান্ডলারের সাথে করা হয়।

এখানে একটি উদাহরণ।

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

onbeforeunloadএবং onunloadহ্যান্ডলারের এখনও গুলি চালানো উচিত; তাদের কেবল এমন কিছু করার অনুমতি দেওয়া উচিত নয় যা ব্যবহারকারীকে অবরুদ্ধ করে। এর অর্থ কোনও সতর্কতা নেই, এবং কোনও ক্রিয়াকলাপ যা কয়েক সেকেন্ডের বেশি সময় নেয়।

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


আপনি কি এমন কোনও ইউআরএল পোস্ট করতে পারেন যা তা করে?
golimar

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

দ্রষ্টব্য: বর্তমান সমস্ত উত্তর (যা পরিবর্তিত করে onbeforeunload) কেবলমাত্র সেই পৃষ্ঠাগুলির জন্য কাজ করবে যা onbeforeunloadইভেন্টগুলি সংযুক্ত করার জন্য অন্য পদ্ধতির একটি ব্যবহার করে এমন পৃষ্ঠাগুলির জন্য নয়।
সিনিটেক

উত্তর:


7

ঠিক আছে, সহজ কাজটি হ'ল পেজগুলির স্ক্রিপ্টটি সরাসরি ওভাররাইড করা এবং ইভেন্টটিকে পুনরায় সাইন করা null

window.onbeforeunload = null;

এগুলি যে কোনও জায়গায় কাজ করা উচিত, যদি না তারা সত্যিকার অর্থে দূষিত হয় এবং এটিকে নিজেরাই পুনরায় নিযুক্ত করে না। এই ক্ষেত্রে, সেটিংস রাখতে একটি লুপ nullসম্ভবত কাজ করবে।

while(true) {
    if (window.onbeforeunload != null) {
        window.onbeforeunload = null;
    }
}

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

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

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

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

window.onbeforeunload = function() {
    //Whatever
    return "WARNING! You have unsaved changes that may be lost!";
}

সুতরাং, আপনি ফাংশনটি মোছা না করে পপআপ অবরোধ করতে অক্ষম হবেন।

এছাড়াও, আপনি যদি কোনও উপায় খুঁজে পান তবে যে কোনও এজেএক্স ব্যর্থ হবে। পপআপ অনুরোধগুলির মধ্য দিয়ে যাওয়ার সময় দেয়, এটি ছাড়া ডেটা হারিয়ে যেতে পারে।

হিসাবে হিসাবে onunload, এটি দিয়ে আপনাকে ব্লক করা সম্ভব হবে না। যেহেতু পৃষ্ঠাটি আনলোড হওয়ার পরে এটি ফায়ার হয় । তবে নিরাপদে থাকার জন্য, আপনি সর্বদা একটি করতে পারেন window.onunload = null;এবং এটির যত্ন নেওয়া উচিত।


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

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

না আমার জন্য :( কাজ
Phuc গুয়েন

0
    // ==/UserScript==

var th = document.getElementsByTagName('body')[0];
var s = document.createElement('script');
s.setAttribute('type','text/javascript');
s.innerHTML = "window.onbeforeunload = function() {}";
th.appendChild(s);

1
আপনি কেন কখনও এ জাতীয় স্ক্রিপ্ট তৈরি করবেন?
ব্র্যাড

3
@anywho। অন্যদের তারা কী করছে তা জানতে সহায়তা করার জন্য আপনি যদি আপনার স্ক্রিপ্টটি ব্যাখ্যা করার চেষ্টা করেন তবে এটি সহায়ক হতে পারে। এটি আপনাকে উত্তর দ্বারা অনেকের দ্বারা ব্যবহার করার অনুমতি দেয় যেহেতু স্ক্রিপ্টের একটি নির্দিষ্ট অংশটি স্ক্রিপ্টের উন্নতি করতে পারে বা কোনও টুকরো সম্পূর্ণ ভিন্ন স্ক্রিপ্টে ব্যবহার করতে সক্ষম হতে পারে way এটি তাদের প্রশ্নের ক্ষেত্রে কীভাবে প্রযোজ্য তা লোকদের জানাতে আপনাকে যেভাবেই হোক উত্তর দেওয়ার ব্যাখ্যা দেওয়াও ভাল ধারণা। আপনার উত্তর পোস্ট করার জন্য আপনাকে ধন্যবাদ।
ডেভিড

0

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

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