ব্রাউজার বা ট্যাব বন্ধকরণ সনাক্ত করুন


306

ব্রাউজার বা ব্রাউজার ট্যাবটি বন্ধ করা হচ্ছে কিনা তা সনাক্ত করার জন্য কি কোনও ক্রস-ব্রাউজার জাভাস্ক্রিপ্ট / jQuery কোড রয়েছে, তবে কোনও লিঙ্ক ক্লিকের কারণে নয়?


1
এই প্রশ্নের আমার উত্তর দেখুন: স্ট্যাকওভারফ্লো.com
নিবাস


sessionStorage সম্পত্তি ব্যবহার করুন , ব্রাউজার বন্ধ হয়ে গেলে এটির মেয়াদ শেষ হবে। w3schools.com/jsref/prop_win_sessionstores.asp
csandreas1

এই উত্তরটি দেখুন! আমি এটি অত্যন্ত কার্যকর বলে মনে করেছি এবং বেশিরভাগ ক্ষেত্রেই এটি অন্তর্ভুক্ত। stackoverflow.com/a/26275621/7192927
SukanyaPai

উত্তর:


273

যদি আমি আপনাকে সঠিকভাবে পাই তবে আপনি জানতে চান কখন কোনও ট্যাব / উইন্ডো কার্যকরভাবে বন্ধ থাকে। ঠিক আছে, এফএইকে এই Javascriptধরণের স্টাফগুলি onunloadএবং onbeforeunloadইভেন্টগুলি সনাক্ত করার একমাত্র উপায় ।

দুর্ভাগ্যক্রমে (বা সৌভাগ্যক্রমে?), যখন আপনি কোনও সাইটকে কোনও linkবা আপনার ব্রাউজারগুলির ব্যাক বোতামের উপরে রেখে যান তখন এই ইভেন্টগুলিও বহিস্কার করা হয় । সুতরাং এটি আমি দিতে সেরা উত্তর, আমি মনে করি না closeআপনি জাভাস্ক্রিপ্টে কোনও খাঁটি সনাক্ত করতে পারেন । আমি এখানে ভুল হলে আমাকে সংশোধন করুন।


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

7
আমি পাশাপাশি 'অন ক্লোজ' বৈশিষ্ট্যটিও ব্যবহার করতে চেয়েছিলাম, কিন্তু লক্ষ্য করেছি যে আমার ব্যবহারকারীরা মাঝে মাঝে এফ 5 টিপে স্ক্রিনটি রিফ্রেশ করবেন। যেহেতু আমার 'অন ক্লোজ' হ্যান্ডলারগুলি এই জাতীয় রিফ্রেশের জন্য অনুরোধ করা হয়েছে, এর অর্থ এটি আমার প্রয়োজনের মতো এটি ব্যবহার করতে পারছি না (যা সত্য 'ক্লোজ ট্যাব বা উইন্ডো' ছিল) ... এটাই, আমাদের একটি নতুন ইভেন্টের মডেল দরকার এই সব জন্য!
জেচ

1
ক্রোম / অপেরাতে আর কাজ করে না ... chromestatus.com/feature/5349061406228480
সমীর

2
অবশ্যই এটি এখনও কাজ করবে, তারা কেবল এ Stringথেকে একটি কাস্টম রিটার্ন মান সরিয়ে দিয়েছে onbeforeunload। সুতরাং এখন আপনি আর লোড করার আগে কোনও কাস্টম বার্তা প্রদর্শন করতে পারবেন না।
jAndy

@jAndy @ গুফা আমি কীভাবে জানালা দিয়ে জানালা চালিত unload?
ডিমের দুদিক

125

ফায়ারফক্স ডকুমেন্টেশন থেকে

কিছু কারণে, ওয়েবকিট-ভিত্তিক ব্রাউজারগুলি ডায়ালগ বাক্সের জন্য অনুপস্থিতি অনুসরণ করে না। প্রায় ক্রস-ওয়ার্কিং উদাহরণ নীচের উদাহরণের কাছাকাছি হবে।

window.addEventListener("beforeunload", function (e) {
  var confirmationMessage = "\o/";

  (e || window.event).returnValue = confirmationMessage; //Gecko + IE
  return confirmationMessage;                            //Webkit, Safari, Chrome
});

সমস্ত ব্রাউজার পরিচালনা করার জন্য এই উদাহরণ।


2
এটিই আমার সমাধান ক্রোম ব্রাউজারের জন্য একমাত্র সমাধান। আমি অন্য কাউকে চেষ্টা করিনি।
চেজ রবার্টস

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

1
কেবলমাত্র ট্যাব খোলা থাকলে ফায়ারফক্স (> = ভার্চু। 44) ব্যবহার করার সময় এই পদ্ধতিটি ট্যাব বন্ধে পুরোপুরি কাজ করছে না।
রাজকিশোর

আজকের হিসাবে, ব্রাউজারগুলির সর্বশেষতম সংস্করণগুলি ব্যবহার করে, ট্যাব বন্ধ করার সময়, ক্রোম, ফায়ারফক্স, অপেরা, আই 1111 এবং এজের ব্রাউজারটি সরিয়ে নেওয়ার সময় বা বন্ধ করার সময় প্রম্পট কাজ করে এবং যখন Chrome একসাথে একাধিক ট্যাব খোলা থাকে যেখানে Chrome সমস্ত ট্যাব বন্ধ করে দেয় works প্রম্পট না করে, আমার মেশিনে কমপক্ষে ভাল।
থিয়েরি

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

48

সরল সমাধান

window.onbeforeunload = function () {
    return "Do you really want to close?";
};

7
এই জাদু কি ধরনের? (y) এটি সমস্ত ব্রাউজারে কাজ করে? ক্রোমে দুর্দান্ত কাজ করে
Ziv Weissman

5
আপনি পৃষ্ঠাটি রিফ্রেশ করার সময় আগুন লাগে। এটাই আমার একমাত্র সমস্যা।
লিও লিওনসিও

6
এই সমাধানটি আর ফায়ারফক্স এবং ক্রোমে নেই
মেহেদি দেহঘনি

এটি কেবলমাত্র ব্রাউজারের ক্লোজ বা ট্যাবটিই বন্ধ রাখার জন্য পৃষ্ঠা ছাড়ার ইভেন্টে ট্রিগার করেছিল
সুনীল আচার্য

20
<body onbeforeunload="ConfirmClose()" onunload="HandleOnClose()">

var myclose = false;

function ConfirmClose()
{
    if (event.clientY < 0)
    {
        event.returnValue = 'You have closed the browser. Do you want to logout from your application?';
        setTimeout('myclose=false',10);
        myclose=true;
    }
}

function HandleOnClose()
{
    if (myclose==true) 
    {
        //the url of your logout page which invalidate session on logout 
        location.replace('/contextpath/j_spring_security_logout') ;
    }   
}

// আপনি যদি কেবল একটি ট্যাব দিয়ে ট্যাব বা ব্রাউজারটি বন্ধ করে থাকেন তবে এটি আই 7 তে কাজ করছে


2
আগে। তবে ie8, ফায়ারফক্সের মতো একাধিক ট্যাব ব্রাউজারের জন্য। এটি ব্যবহার করতে সমস্যা আছে?
ধূমকেতু

দেখা যাচ্ছে যে আইই 9-এ এই কোডটি ব্যবহার করা যখন ব্যবহারকারী তাদের মাউসটির সাহায্যে পিছনে, ফরোয়ার্ডে বা রিফ্রেশ বোতামগুলিতে ক্লিক করে তখন এই বার্তাটি পপ আপ করবে।
স্টিভ ওয়ারথাম

২০০ a সালে আমরা একই ধরণের সমাধানটি বাস্তবায়িত করেছি a এই সমাধানটি প্রায় এক সপ্তাহ আগে আই 9 তে আর কাজ করে না। এটি ট্যাবড ব্রাউজারগুলিতে কাজ করা (অথবা সম্ভবত কখনও কাজ করেনি) বন্ধ করে দিয়েছে।
tjfo

আমি ইনজেকশনের window.onunload = "alert('wait')"এবং window.onbeforeunload = "alert('wait... chrome!')"ক্রোমিয়াম / উবুন্টুতে কনসোল ব্যবহার কিন্তু কেউই বহিস্কার যখন আমি ট্যাব বন্ধ করে দেয়।
আইসড ওয়াটার

window.onunload = "alert('wait')"এবং যেমন মত কাজ সত্যিই কাজ করা উচিত নয়। "ফাংশনের ইভেন্ট ইভেন্টের রিটার্নভ্যালু সম্পত্তিটিতে একটি স্ট্রিং মান নির্ধারণ করা উচিত এবং একই স্ট্রিংটি ফিরিয়ে দেওয়া উচিত"। দয়া করে এমডিএন নিবন্ধটি
দিমিত্রি ভাইপ্রিচেঙ্কো

8

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

প্রথমে, জেএসের beforeunloadইভেন্ট হ্যান্ডলারে সার্ভারে একটি কাউন্টডাউন টাইমার শুরু করুন । আইজ এবং এজকে সঠিকভাবে কাজ করার জন্য এজাক্স কলগুলির সমকালীন হওয়া দরকার। return;নিশ্চিতকরণ ডায়ালগটি এ জাতীয় প্রদর্শিত হতে আটকাতে আপনাকেও ব্যবহার করতে হবে:

    window.addEventListener("beforeunload", function (e) {        
      $.ajax({
          type: "POST",
          url: startTimerUrl,
          async: false           
      });
      return;
    });

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

বাস্তবায়ন দ্রষ্টব্য: আমি এএসপি.নেট এমভিসি 5 ব্যবহার করছি এবং আমি একটি ওভাররাইড Controller.OnActionExecuted()পদ্ধতিতে লগআউট বাতিল করছি ।


এটি দুর্দান্ত কাজ করেছে। আপনি "অ্যাসিঙ্ক: মিথ্যা" করার কোনও কারণ আছে? এটি এমন সতর্কতা উত্পন্ন করে যা সিঙ্ক্রোনাস এজেএক্স কলগুলি হ্রাস পেয়েছে। ধন্যবাদ!
cat_in_hat

1
@ ফাউন্ডওয়াল্ডো এক্সসেপশন, উত্তরে উল্লিখিত হিসাবে, আমি পেয়েছি যে আইআই এবং এজতে কাজ করার জন্য অ্যাসিঙ্কটিকে মিথ্যাতে সেট করা দরকার।
আইওনিয়ান 1616

কিভাবে লগআউট বাতিল OnActionExecuted?
কুইকিনেট

@ কুইকিনেট আপনার কোডে শুরু হওয়া টাইমারটি বন্ধ করুন।
আইওনিয়ান 1616

6

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

তবে, আমি একমত যে সত্যিকারের ঘনিষ্ঠ ইভেন্টের অভাবটি ভয়াবহ: উদাহরণস্বরূপ, যদি আপনি কেবল আসল বন্ধের ক্ষেত্রে ব্যাক-এন্ডে আপনার সেশনের অবস্থাটি পুনরায় সেট করতে চান তবে এটি একটি সমস্যা।


6

অনুরূপ কাজের জন্য, sessionStorageব্রাউজার ট্যাবটি বন্ধ না হওয়া পর্যন্ত আপনি স্থানীয়ভাবে ডেটা সঞ্চয় করতে ব্যবহার করতে পারেন ।

sessionStorageশুধুমাত্র এক অধিবেশন (যখন ব্রাউজার ট্যাব বন্ধ করা হয় ডেটা মুছে ফেলা হয়) জন্য অবজেক্ট দোকানে তথ্য। ( W3Schools )

এই আমার কলম

<div id="Notice">
    <span title="remove this until browser tab is closed"><u>dismiss</u>.</span>
</div>
<script>
    $("#Notice").click(function() {
     //set sessionStorage on click
        sessionStorage.setItem("dismissNotice", "Hello");
        $("#Notice").remove();
    });
    if (sessionStorage.getItem("dismissNotice"))
    //When sessionStorage is set Do stuff...
        $("#Notice").remove();
</script>

5

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

if(myWindow.closed){do things}

দ্রষ্টব্য: যে কোনও কিছুতে পোলিং করা সর্বোত্তম সমাধান নয়। window.onbeforeunloadঘটনা যদি সম্ভব ব্যবহার করা উচিত, শুধুমাত্র সতর্কীকরণ হচ্ছে যে এটি আগুন যদি তোমরা মুখ নেভিগেট করুন।


4
$(window).unload( function () { alert("Bye now!"); } );

9
এটি ফায়ারফক্স বা ক্রোমে কাজ করবে না। beforeunloadসতর্কতা প্রদর্শন করতে চাইলে চেষ্টা করুন । এটি পছন্দ করুন:$(window).on('beforeunload', function(){ alert ('Bye now')});
অ্যাড্রিয়ানোআরআর 12:51

5
jQuery ডকস অনুসারে "বেশিরভাগ ব্রাউজারগুলি সতর্কতা (), কনফার্ম () এবং প্রম্পট () প্রেরণের
katzmopocon

4

এটি ব্যবহার করার চেষ্টা করুন:

window.onbeforeunload = function (event) {
    var message = 'Important: Please click on \'Save\' button to leave this page.';
    if (typeof event == 'undefined') {
        event = window.event;
    }
    if (event) {
        event.returnValue = message;
    }
    return message;
};

$(function () {
    $("a").not('#lnkLogOut').click(function () {
        window.onbeforeunload = null;
    });
    $(".btn").click(function () {
        window.onbeforeunload = null;
});
});

3

আমি একটি উপায় পেয়েছি, যা আমার সমস্ত ব্রাউজারে কাজ করে

নিম্নলিখিত সংস্করণে পরীক্ষিত: ফায়ারফক্স 57, ইন্টারনেট এক্সপ্লোরার 11, এজ 41, ল্যাটেড ক্রোমের অন্যতম (এটি আমার সংস্করণটি দেখায় না)

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

  $(document).ready(function(){         

        var validNavigation = false;

        // Attach the event keypress to exclude the F5 refresh (includes normal refresh)
        $(document).bind('keypress', function(e) {
            if (e.keyCode == 116){
                validNavigation = true;
            }
        });

        // Attach the event click for all links in the page
        $("a").bind("click", function() {
            validNavigation = true;
        });

        // Attach the event submit for all forms in the page
        $("form").bind("submit", function() {
          validNavigation = true;
        });

        // Attach the event click for all inputs in the page
        $("input[type=submit]").bind("click", function() {
          validNavigation = true;
        }); 

        window.onbeforeunload = function() {                
            if (!validNavigation) {     
                // ------->  code comes here
            }
        };

  });

ব্রাউজার বন্ধের জন্য পৃথক হ্যান্ডলার কীভাবে যুক্ত হবে..আমি মনে করি না এটির জন্য আমাদের আলাদা ইভেন্ট রয়েছে।
ব্লেজহাব

এটি খুব সহায়ক ছিল। আমার অ্যাঙ্করটি কেবলমাত্র হাইপারলিংকের জন্য আগুনে সামঞ্জস্য করা দরকার। তা না হলে বুটস্ট্র্যাপ নীচে ট্যাব এ ক্লিক এটা তছনছ আপ: $ ( "একটি [a href =! ']") না। (' [সূরা ^ = "#"] ') বেঁধে ( "ক্লিক করুন", ফাংশন ()।
কেন Forslund

3

যেহেতু কেউ এখনও এটি উল্লেখ করেনি (8+ বছর পরে): একটি ওয়েবস্কট একটি বদ্ধ ট্যাব সনাক্তকরণের অন্য কার্যকর উপায় হতে পারে। যতক্ষণ না ট্যাবটি খোলা থাকে এবং হোস্টের দিকে ইশারা করে, ক্লায়েন্ট হোস্টের সাথে একটি সক্রিয় ওয়েবস্কট সংযোগ বজায় রাখতে সক্ষম হয়।

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

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

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


2
এটা ঠিক আছে. তবে, আপনি কি কোনও কোড বা পদ্ধতি পরিচালনা করতে পারবেন না? তা ছাড়া আমার মতো নুবুকের জন্য বুঝতে পারি না
পি সতীশ প্যাট্রো

আসলে, আমি আমার প্রথম মন্তব্যে পরিষ্কার ছিল না। আমি ওয়েব সকেট জানি না। সুতরাং, আমি কীভাবে পরিচালনা করব তা দেখতে চেয়েছিলাম
পি সতীশ প্যাট্রো

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

2
//Detect Browser or Tab Close Events
$(window).on('beforeunload',function(e) {
  e = e || window.event;
  var localStorageTime = localStorage.getItem('storagetime')
  if(localStorageTime!=null && localStorageTime!=undefined){
    var currentTime = new Date().getTime(),
        timeDifference = currentTime - localStorageTime;

    if(timeDifference<25){//Browser Closed
       localStorage.removeItem('storagetime');
    }else{//Browser Tab Closed
       localStorage.setItem('storagetime',new Date().getTime());
    }

  }else{
    localStorage.setItem('storagetime',new Date().getTime());
  }
});

জেএসফিডাল লিংক

হাই সব, আমি ব্রাউজার স্থানীয় স্টোরেজ এবং টাইমস্ট্যাম্প ব্যবহার করে 'ব্রাউজার এবং ট্যাব ক্লোজ ইভেন্ট সনাক্ত করুন' ক্লিকগুলি অর্জন করতে সক্ষম হয়েছি। আশা করি এই সমাধানটি ব্যবহার করে আপনারা সকলেই আপনার সমস্যার সমাধান করবেন।

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

আমি এটি ক্রোম ব্রাউজার সংস্করণ 76.0.3809.132 এ পরীক্ষা করেছি এবং কাজ করতে দেখেছি

:) আপনি আমার উত্তরটি সহায়ক মনে করলে ভোট দিন ....


ঠিক আছে, এটি আমাকে একটি ধারণা দিয়েছে। আমি লগইন করার পরে এবং ইভেন্টটি আগেই লোড করার পরে লোকালস্টোরেজে 10 সেকেন্ডের টাইমস্ট্যাম্প সেট করছি am লোডে আমি যাচাই করেছি যদি সময় কেটে যায় তবে লগইন পৃষ্ঠায় পুনর্নির্দেশ করুন। ধন্যবাদ :)
G4BB3R

1
window.onbeforeunload = function() {
  console.log('event');
  return false; //here also can be string, that will be shown to the user
}

2
here also can be string, that will be shown to the userতা না, ফায়ারফক্স, এটি Chrome এ কিন্তু আছে না ...
TrySpace

যে কোনও রিটার্ন মান (স্ট্রিং) কেবল এমএসআইই <= 11 এ প্রদর্শিত হয় তাই অন্য সমস্ত ব্রাউজারের জন্য মূলত অকেজো।
ওএসওয়ারাক্স

1

এটি 'আনলোড' ইভেন্টের মতো ইভেন্ট হ্যান্ডলারের মধ্যে উইন্ডোটির সাহায্যে এটি পরীক্ষা করা সম্ভব time

জেএসফিডেলের উদাহরণ (লেটস সাফারি, এফএফ, ক্রোম, এজ এবং আই 11 এ পরীক্ষিত)

var win = window.open('', '', 'width=200,height=50,left=200,top=50');
win.document.write(`<html>
   <head><title>CHILD WINDOW/TAB</title></head>
   <body><h2>CHILD WINDOW/TAB</h2></body>
</html>`);
win.addEventListener('load',() => {
    document.querySelector('.status').innerHTML += '<p>Child was loaded!</p>';
});
win.addEventListener('unload',() => {
    document.querySelector('.status').innerHTML += '<p>Child was unloaded!</p>';
    setTimeout(()=>{
        document.querySelector('.status').innerHTML +=  getChildWindowStatus();
    },1000);
});
win.document.close()
document.querySelector('.check-child-window').onclick = ()=> {
    alert(getChildWindowStatus());
}
function getChildWindowStatus() {
  if (win.closed) { 
      return 'Child window has been closed!';
  } else {
      return 'Child window has not been closed!';
  }
}

1

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

<body onUnload="LogOff()">

এবং তারপরে অ্যাকাউন্ট / লগঅফে পুনর্নির্দেশের জন্য লগঅফ ফাংশন যুক্ত করুন যা Asp.Net MVC- এ অন্তর্নির্মিত পদ্ধতি। এখন, যখন আমি ব্রাউজার বা ট্যাবটি বন্ধ করি, এটি লগঅফ পদ্ধতিতে পুনর্নির্দেশ করে এবং ব্যবহারকারীরা যখন ফিরে আসে তখন লগইন করতে হয়। আমি এটি ক্রোম এবং ফায়ারফক্স উভয় ক্ষেত্রেই পরীক্ষা করেছি। এবং এটি কাজ করে!

  function LogOff() {
        $.ajax({
            url: "/Account/LogOff",
            success: function (result) {

                                        }
               });
       }

0
window.onbeforeunload = function ()
{       

    if (isProcess > 0) 
    {
        return true;       
    }   

    else
    { 
        //do something      
    }
}; 

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


প্রসেস সেট জন্য সম্পূর্ণ নমুনা?
কুইকিনেট

0
window.addEventListener("beforeunload", function (e) {
 var confirmationMessage = "tab close";

 (e || window.event).returnValue = confirmationMessage;     //Gecko + IE
 sendkeylog(confirmationMessage);
 return confirmationMessage;                                //Webkit, Safari, Chrome etc.
}); 

প্রকৃতপক্ষে আমি নিশ্চিতকরণ বার্তাটি দেখাতে চেয়েছিলাম যদি ব্যবহারকারী কেবলমাত্র ট্যাবটি বন্ধ করে দেয়। এটা আমার জন্য কাজ করছে। কিন্তু আমি একটি ইস্যু সম্মুখীন হচ্ছি, আমি একই পৃষ্ঠায় কোন লিঙ্কে তার দেখাচ্ছে নিশ্চিতকরণ ক্লিক করছি তাহলে এছাড়াও তারপর message.For Moe উল্লেখ করুন: w3schools.com/code/tryit.asp?filename=FEK2KWUN9R8Z @Tunaki
মোহাম্মদ

1
কি sendkeylog?
কিকিনেট

0

@ অ্যান্ডি উল্লিখিত হিসাবে, উইন্ডোটি বন্ধ হয়ে যাচ্ছে তা সনাক্ত করার জন্য কোনও জাভাস্ক্রিপ্ট কোড সঠিকভাবে নেই। @ সাইনো যা প্রস্তাব করেছিল তা থেকে আমি শুরু করেছিলাম।

আমি এরকম পরিস্থিতি পেরিয়ে এসেছি এবং আপনি এই পদক্ষেপগুলি অনুসরণ করে থাকেন তবে আপনি এটি সনাক্ত করতে সক্ষম হবেন।
আমি এটি ক্রোম 67+ এবং ফায়ারফক্স 61+ এ পরীক্ষা করেছি।

var wrapper = function () { //ignore this

var closing_window = false;
$(window).on('focus', function () {
    closing_window = false; 
   //if the user interacts with the window, then the window is not being 
   //closed
});

$(window).on('blur', function () {

    closing_window = true;
    if (!document.hidden) { //when the window is being minimized
        closing_window = false;
    }
    $(window).on('resize', function (e) { //when the window is being maximized
        closing_window = false;
    });
    $(window).off('resize'); //avoid multiple listening
});

$('html').on('mouseleave', function () {
    closing_window = true; 
    //if the user is leaving html, we have more reasons to believe that he's 
    //leaving or thinking about closing the window
});

$('html').on('mouseenter', function () {
    closing_window = false; 
    //if the user's mouse its on the page, it means you don't need to logout 
    //them, didn't it?
});

$(document).on('keydown', function (e) {

    if (e.keyCode == 91 || e.keyCode == 18) {
        closing_window = false; //shortcuts for ALT+TAB and Window key
    }

    if (e.keyCode == 116 || (e.ctrlKey && e.keyCode == 82)) {
        closing_window = false; //shortcuts for F5 and CTRL+F5 and CTRL+R
    }
});

// Prevent logout when clicking in a hiperlink
$(document).on("click", "a", function () {
    closing_window = false;
});

// Prevent logout when clicking in a button (if these buttons rediret to some page)
$(document).on("click", "button", function () {
    closing_window = false;

});
// Prevent logout when submiting
$(document).on("submit", "form", function () {
    closing_window = false;
});
// Prevent logout when submiting
$(document).on("click", "input[type=submit]", function () {
    closing_window = false;
});

var toDoWhenClosing = function() {

    //write a code here likes a user logout, example: 
    //$.ajax({
    //    url: '/MyController/MyLogOutAction',
    //    async: false,
    //    data: {

    //    },
    //    error: function () {
    //    },
    //    success: function (data) {
    //    },
    //});
};


window.onbeforeunload = function () {
    if (closing_window) {
        toDoWhenClosing();
    }
};

};


1
আপনার জাভাস্ক্রিপ্ট কোডটিতে আপনার কিছু সমস্যা রয়েছে। প্রথম জিনিসটি আমি লক্ষ্য করেছি যে resizeউইন্ডোটি ঝাপসা হয়ে যাওয়ার সময় আপনি নিয়মিত আবদ্ধ হন । যদি এটি 100x ঝাপসা হয়ে যায় তবে আপনার 100 জন শ্রোতা থাকবে যা ব্রাউজারটি ধীর করে দেবে।
কাইল

আমি একটি window (উইন্ডো) রেখেছি। অফ ('আকার'), এটি কি যথেষ্ট হবে?
ব্রুনো হেনরিক 21

প্রযুক্তিগতভাবে, তবে এটি jQuery এর মাধ্যমে অন্য কোথাও যুক্ত হওয়া অন্যান্য হ্যান্ডলারগুলিও সরিয়ে ফেলবে।
কাইল

-2

এটি চেষ্টা করুন, আমি নিশ্চিত এটি আপনার পক্ষে কাজ করবে।

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type='text/javascript'>
    $(function() {

        try{
            opera.setOverrideHistoryNavigationMode('compatible');
            history.navigationMode = 'compatible';
        }catch(e){}

        function ReturnMessage()
        {
            return "wait";
        }

        function UnBindWindow()
        {
            $(window).unbind('beforeunload', ReturnMessage);
        }

        $(window).bind('beforeunload',ReturnMessage );
    });
</script>

-3

এটা চেষ্টা কর. এটা কাজ করবে। jquery আনলোড পদ্ধতি হ্রাস করা হয়।

window.onbeforeunload = function(event) {
    event.returnValue = "Write something clever here..";
};
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.