উইন্ডো বন্ধ বা পৃষ্ঠা রিফ্রেশে জাভাস্ক্রিপ্ট কোড চালাবেন?


110

যখন কোনও ব্যবহারকারী কোনও ব্রাউজার উইন্ডো বন্ধ করে দেয় বা পৃষ্ঠাটি রিফ্রেশ করে তখন একটি চূড়ান্ত জাভাস্ক্রিপ্ট কোড চালানোর কোনও উপায় আছে কি?

আমি অন্লোডের মতো একই রকমের কথা ভাবছি তবে অনক্লোজের মতো? ধন্যবাদ।

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


1
সম্ভাব্য অনুরূপ: stackoverflow.com/questions/805463/...
1.44mb

সম্ভাব্য সদৃশ: স্ট্যাকওভারফ্লো.com
১6363১

18
অপেক্ষা করুন - এটি আসলে একটি সদৃশ নয় ... তিনি ব্যবহারকারীর কাছে একটি প্রম্পট ছাড়াই কীভাবে কিছু চালাতে চান তা জানতে
চান-

উত্তর:


84

উভয়ই রয়েছে window.onbeforeunloadএবং window.onunloadযা ব্রাউজারের উপর নির্ভর করে আলাদাভাবে ব্যবহৃত হয়। আপনি উইন্ডো বৈশিষ্ট্যগুলি ফাংশনে সেট করে বা এগুলি ব্যবহার করে তাদের আশ্বাস দিতে পারেন .addEventListener:

window.onbeforeunload = function(){
   // Do something
}
// OR
window.addEventListener("beforeunload", function(e){
   // Do something
}, false);

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


এটি আমার জন্য কাজ করেছে: ফায়ারফক্স (.0৯.০.২) এবং ক্রোম (.0 77.০.৩865..৯০)
ফিলিপ ক্যাপারেলি

51

ঠিক আছে, আমি এর জন্য একটি কার্যকরী সমাধান খুঁজে পেয়েছি, এটি beforeunloadইভেন্টটি ব্যবহার করে এবং তারপরে হ্যান্ডলারটি ফেরত তৈরি করে null। এটি একটি নিশ্চিতকরণ বক্স পপিং-আপ ছাড়াই ওয়ান্ট কোডটি কার্যকর করে। এইটার মতো কিছু একটা হচ্ছে:

window.onbeforeunload = closingCode;
function closingCode(){
   // do something...
   return null;
}

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


10
নেভিগেট করার সময় এবং রিফ্রেশ করার সময় এটি কি বরখাস্ত হয় না (F5)? যদি তা হয় তবে তা সত্যিই প্রশ্নের সমাধান করে না ...
জাগো

1
পরীক্ষিত নয়, তবে আমি মনে করি return false;এটি একই রকম হয় (অর্থাত্ ডিফল্ট আচরণকে বাধা দেয়) এবং এটি শব্দার্থগতভাবে সঠিক।
কলিমার্কো

1
প্রত্যাবর্তন মিথ্যা এখনও ডায়লগ বাক্সটি পপ আপ করবে যদি আপনি পৃষ্ঠাটি ছেড়ে যেতে চান কিনা তা জিজ্ঞাসা করে। আমি এটি একটি অ্যাঙ্গারে পরীক্ষা করেছিলাম। রিটার্ন নাল দিয়ে ডায়ালগটি পপ আপ হয়নি তবে এটি এখনও কনসোল.লগ করেছে
রিকি স্ট্যাম

20

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

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

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

window.addEventListener("unload", logData, false);

function logData() {
  navigator.sendBeacon("/log.php", analyticsData);
}

sendBeacon()হয় সমর্থিত মধ্যে:

  • এজ 14
  • ফায়ারফক্স 31
  • ক্রোম 39
  • সাফারি 11.1
  • অপেরা 26
  • আইওএস সাফারি 11.4

এটি বর্তমানে এতে সমর্থিত নয়:

  • ইন্টারনেট এক্সপ্লোরার
  • অপেরা মিনি

আপনার যদি অসমর্থিত ব্রাউজারগুলির জন্য সমর্থন যোগ করার প্রয়োজন হয় তবে সেন্ডবিকন () এর জন্য একটি পলিফিল রয়েছে । যদি পদ্ধতিটি ব্রাউজারে উপলভ্য না হয় তবে এটি পরিবর্তে একটি সিঙ্ক্রোনাস এজেএক্স অনুরোধ প্রেরণ করবে।


এই প্রশ্নটি "সার্ভারে একটি অনুরোধ প্রেরণ করা" মামলার পরিধিতে ছিল। এই ধারণাটি ছিল যে প্রতি ব্যবহারকারী খোলা ট্যাবে ট্যাব রাখতে এবং কোনও ট্যাব বন্ধ হয়ে গেলে ব্যাক-এন্ডে ক্লিন-আপ করতে সক্ষম হবেন।
পিটার

@ পিটার আমি সম্পূর্ণতার জন্য এটি অন্তর্ভুক্ত ছিল, কিন্তু আমি এটি মুছে ফেলেছি।
মাইক

@ মাইক, দয়া করে, আপনার উত্তর মুছবেন না। এটি কেবলমাত্র নির্বাচিত সেরা
উত্তরটিই

@ অ্যালেক্স ৮75৫২ আমি আমার উত্তর মুছলাম না, আমি এর একটি অংশ সম্পাদনা করেছি যা প্রশ্নের সাথে অপ্রাসঙ্গিক ছিল, যা আপনি এখানে দেখতে পারেন ।
মাইকে

1
@ আশোককুমার আপনি সার্ভারে যা প্রেরণ করেন তা আপনার নিয়ন্ত্রণে রয়েছে। আপনি যদি জিইটির মাধ্যমে জিনিসগুলি প্রেরণ করতে চান তবে এমন কোনও কিছুই নেই যা আপনাকে অনুরোধটি এমন কিছুতে http://example.com/script.php?token=something&var1=val1&var2=val2জিইটির মধ্যে রাখার মতো অনুরোধ পাঠাতে বাধা দেয় ।
মাইক

14

jQuery সংস্করণ:

$(window).unload(function(){
    // Do Something
});

আপডেট : jQuery 3:

$(window).on("unload", function(e) {
    // Do Something
});

ধন্যবাদ গ্যারেট


8

এখানে ডকুমেন্টেশনগুলি অনবিত্ত পুনরুদ্ধার ইভেন্ট এবং / অথবা উইন্ডোতে ইভেন্ট শ্রোতাদের যুক্ত করার জন্য উত্সাহ দেয়।

window.addEventListener('beforeunload', function(event) {
  //do something here
}, false);

আপনি কেবল একটি ফাংশন বা কোনও ফাংশন রেফারেন্স সহ উইন্ডোটির।

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


7

আপনি ব্যবহার করতে পারেন window.onbeforeunload

window.onbeforeunload = confirmExit;
function confirmExit(){
    alert("confirm exit is being called");
    return false;
}

3

ইভেন্টটি বলা হয় beforeunload, যাতে আপনি কোনও ফাংশন নির্ধারণ করতে পারেন window.onbeforeunload


-2

আপনি এরকম কিছু চেষ্টা করতে পারেন:

<SCRIPT language="JavaScript">
<!--
function loadOut()
{
window.location="http://www.google.com";
}
//-->
</SCRIPT>

<body onBeforeUnload="loadOut()">

23
সাবধান, লোকেরা প্রাচীন কালে নয় এটি পড়েন - এটি প্রাচীন জেএস এবং এইচটিএমএল এবং এখানে অন্যান্য পরামর্শগুলি আরও ভাল।
রেন্ডারস 100
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.