2010-10-27 11 views
27

मैं बस पूरी साइट पंजीकरण प्रक्रिया के बारे में सोच रहा हूं।यह पता लगाने के लिए संभव है कि उपयोगकर्ता के पास आपकी साइट के एकाधिक टैब खुले हैं या नहीं?

कोई उपयोगकर्ता आपकी साइट पर जाता है, साइन अप करता है, और फिर आप उसे बताते हैं कि आपने उसे एक ईमेल भेजा है और उसे अपना ईमेल पता सत्यापित करने की आवश्यकता है। तो वह हिट + टी, पॉप एक नया टैब खोलता है, अपने Gmail एफएवी बटन को हिट करता है, आपके लंबे स्वागत ईमेल का एक शब्द नहीं पढ़ता है, लेकिन वह देखे गए पहले लिंक पर क्लिक करता है। जीमेल आपकी साइट को एक और टैब में खुलता है ...

उसे आपकी साइट के लिए दो टैब की आवश्यकता नहीं है और न ही चाहते हैं, वह सिर्फ उस डर्न पेज को देखना चाहता है जिसे आपने रजिस्टरों तक पहुंचने तक उसे अनुमति नहीं दी है।

तो हम क्या करते हैं? मैंने एक साइट देखी (लेकिन मैं भूल गया कि यह क्या था) जिसने वास्तव में अच्छी नौकरी की, और वास्तव में मैंने जो भी टैब खोल दिया था, उसे बिना किसी प्रेस को दबाया।

मैं सोच रहा हूं, अगर हम यह पता लगा सकते हैं कि उपयोगकर्ता के पास पहले से ही आपकी साइट पर एक टैब है, तो हम अच्छा हो सकते हैं, हम या तो स्वचालित रूप से नया सत्यापन-टैब बंद कर सकते हैं, या उसे बता सकते हैं कि वह इसे बंद कर सकता है अपने दूसरे टैब पर (जिसे हमने अभी ताज़ा किया है और उसे लॉग इन किया है)।

या, जब वह आपको परेशान कर रहा है, तो कृपया अपना ईमेल जांचें, वह सीधे अपने ईमेल पर गया, अपनी साइट को अपने ईमेल से बदलकर पूरी तरह से जानकर कि ईमेल उसे फिर से साइट पर लिंक करेगा। उस स्थिति में, हम टैब को बंद नहीं करना चाहते हैं, लेकिन शायद पहले से अपना स्थान सहेज सकता था, और उसे फिर से पुनर्निर्देशित कर सकता था?

वैसे भी, यह केवल उपयोग का मामला है ... प्रश्न अभी भी खड़ा है। क्या हम पता लगा सकते हैं कि उपयोगकर्ता के पास पहले से ही आपकी साइट पर एक टैब है या नहीं?


यह सवाल नहीं कैसे पता लगाने के लिए एक उपयोगकर्ता पंजीकरण प्रक्रिया के पूरा कर लिया है जब के बारे में है। अजाक्स मतदान या धूमकेतु उस मुद्दे को हल कर सकते हैं। मैं विशेष रूप से जानना चाहता हूं कि उपयोगकर्ता के पास पहले से ही आपकी साइट पर एक टैब खुला है या नहीं।

+0

मैं एक पूर्ण उत्तर लिखने के लिए पर्याप्त नहीं हूं - लेकिन मूल रूप से, आपको इसे एक कुकी, या स्थानीय स्टोरेज, या सर्वर-साइड के साथ ट्रैक करना होगा - वास्तव में, एक विंडो के बाहर डेटा संग्रहीत करने का कोई भी रूप। –

+1

@ एडी: मुझे परवाह है। मैं छोटी चीजें देखता हूं। उस साइट ने मुझ पर एक अच्छा प्रभाव डाला! – mpen

+0

आपका लक्षित ब्राउज़र क्या है? क्या आप स्थानीय स्टोरेज की तरह कुछ इस्तेमाल कर सकते हैं? – Warty

उत्तर

33

मैं यहां पार्टी (एक वर्ष से अधिक) के लिए काफी देर से हूं, लेकिन मैं मदद नहीं कर सका लेकिन ध्यान दिया कि आप एक अविश्वसनीय रूप से आसान और सुरुचिपूर्ण समाधान (और शायद उस वेबसाइट को आपने देखा है) को याद किया होगा।

जावास्क्रिप्ट का उपयोग करके आप आप वर्तमान के माध्यम से खुले विंडो के नाम बदल सकते हैं: फिर

window.name = "myWindow"; 

जब तुम बाहर अपने पुष्टिकरण ईमेल बस (यह मानते हुए कि आप एक HTML ईमेल भेज रहे हैं) कर भेजें:

<a href="verificationlink.php" target="myWindow">Verify</a> 

जिसके परिणामस्वरूप verificationLink उस विंडो के अंदर खुलना चाहिए जिसकी वेबसाइट पहले ही लोड हो चुकी है, अगर यह पहले ही बंद हो चुकी है तो यह निर्दिष्ट विंडो नाम के साथ एक नया टैब खुल जाएगा।

+2

रीडायरेक्ट करें यदि पृष्ठ दो अलग-अलग ब्राउज़रों में खोला गया है तो काम नहीं करेगा। लेकिन निश्चित रूप से इस सवाल में उल्लेख नहीं किया गया था तो क्या मैं डब्लूटीएच कह रहा हूं? : डी –

+3

यह वास्तव में प्रश्न का उत्तर नहीं देता है: "क्या हम पता लगा सकते हैं कि उपयोगकर्ता के पास पहले से ही आपकी साइट पर एक टैब है या नहीं?" एक और उदाहरण यह हो सकता है कि यदि आप अपनी साइट पर दो खिड़कियां खोलें तो आप उपयोगकर्ता को चेतावनी देना चाहते हैं। – bvs

6

आप मूल टैब से प्रत्येक एक्स सेकंड एक AJAX अनुरोध भेज सकते हैं जो सर्वर से पूछता है कि उसे ईमेल से अनुरोध प्राप्त हुआ है।

आप दूसरे टैब को स्वचालित रूप से बंद नहीं कर सकते हैं, लेकिन आप 3X सेकंड के बाद सर्वर से पूछ सकते हैं कि यह पहले टैब से सुना गया है या नहीं।

2

उपयोगकर्ता के पास अभी भी सर्वर पर एक सत्र होगा। पंजीकरण से पहले उपयोगकर्ता के स्थान को संग्रहीत क्यों न करें, और जब वे अपने पंजीकरण की पुष्टि करते हैं, तो सत्र से वापस स्थान पढ़ें और उस पृष्ठ पर वापस रीडायरेक्ट करें। कोई टैब जादू आवश्यक है। यह निश्चित रूप से नहीं है कि मैं एक साइनअप प्रक्रिया से क्या उम्मीद करूंगा।

+0

फिर आपके पास अभी भी पहला टैब होगा। – SLaks

+0

हां। साइनअप प्रक्रिया में यही होता है। हम इसका अच्छी तरह से उपयोग कर रहे हैं। – spender

+0

फिर दोनों टैबों का एक ही पृष्ठ खुला है ... हमें सटीक उसी पृष्ठ के साथ दो की आवश्यकता नहीं है। मैं पूछ रहा हूं कि मैं उनमें से एक को कैसे बंद कर सकता हूं। – mpen

6

आप पेज की कार्यक्षमता को रोक सकता है जब उपयोगकर्ता किसी अन्य टैब या अन्य विंडो या यहाँ तक कि किसी अन्य ब्राउज़र खोला

$(window).blur(function(){ 
    // code to stop functioning or close the page 
}); 
3

क्या मैं यहाँ है आप के लिए थोड़ा अलग उपयोग के मामले है, लेकिन अगर उसे पता लगता साइट जा रहा है दूसरे टैब में पहुंचा इस मामले में मैं कुछ कॉल सेंटर पृष्ठों का उपयोग करके लोगों को केवल एक टैब तक सीमित करना चाहता था। यह अच्छी तरह से काम करता है और पूरी तरह क्लाइंट-साइड है।

// helper function to set cookies 
function setCookie(cname, cvalue, seconds) { 
    var d = new Date(); 
    d.setTime(d.getTime() + (seconds * 1000)); 
    var expires = "expires="+ d.toUTCString(); 
    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/"; 
} 

// helper function to get a cookie 
function getCookie(cname) { 
    var name = cname + "="; 
    var decodedCookie = decodeURIComponent(document.cookie); 
    var ca = decodedCookie.split(';'); 
    for(var i = 0; i < ca.length; i++) { 
     var c = ca[i]; 
     while (c.charAt(0) == ' ') { 
      c = c.substring(1); 
     } 
     if (c.indexOf(name) == 0) { 
      return c.substring(name.length, c.length); 
     } 
    } 
    return ""; 
} 

// Do not allow multiple call center tabs 
if (~window.location.hash.indexOf('#admin/callcenter')) { 
    $(window).on('beforeunload onbeforeunload', function(){ 
     document.cookie = 'ic_window_id=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'; 
    }); 

    function validateCallCenterTab() { 
     var win_id_cookie_duration = 10; // in seconds 

     if (!window.name) { 
      window.name = Math.random().toString(); 
     } 

     if (!getCookie('ic_window_id') || window.name === getCookie('ic_window_id')) { 
      // This means they are using just one tab. Set/clobber the cookie to prolong the tab's validity. 
      setCookie('ic_window_id', window.name, win_id_cookie_duration); 
     } else if (getCookie('ic_window_id') !== window.name) { 
      // this means another browser tab is open, alert them to close the tabs until there is only one remaining 
      var message = 'You cannot have this website open in multiple tabs. ' + 
       'Please close them until there is only one remaining. Thanks!'; 
      $('html').html(message); 
      clearInterval(callCenterInterval); 
      throw 'Multiple call center tabs error. Program terminating.'; 
     } 
    } 

    callCenterInterval = setInterval(validateCallCenterTab, 3000); 
} 
+0

क्या आप यहां सारांशित कर सकते हैं कि आप यहां क्या कर रहे हैं? ऐसा लगता है कि आप प्रत्येक विंडो/टैब को एक यादृच्छिक नाम दे रहे हैं और उसे कुकी में सहेज रहे हैं। फिर आप प्रत्येक 10 सेकंड में कुकी की जांच करते हैं और यदि यह मेल नहीं खाता है, तो आप उन्हें सतर्क करते हैं? जब वे 1 टैब पर वापस आ जाएंगे, तो क्या यह नाम रीसेट करेगा ताकि पहला टैब एक अच्छी स्थिति में हो? – mpen

1

अन्य उत्तर करने के लिए जोड़ने के लिए: तुम भी localStorage उपयोग कर सकते हैं। 'OpenTabs' जैसी प्रविष्टि करें। जब आपका पृष्ठ खोला जाता है, तो इस नंबर को बढ़ाएं। जब उपयोगकर्ता पृष्ठ छोड़ देता है, तो इसे कम करें।

संबंधित मुद्दे