2012-08-10 18 views
20

मुझे यह पहचानने में सक्षम होना चाहिए कि मैं ब्राउज़र में किस टैब में हूं। क्या टैब की पहचान करने के लिए ब्राउज़र से कुछ जानकारी नहीं मिल सकती है? मुझे किसी भी अन्य टैब के बारे में कुछ भी जानने की ज़रूरत नहीं है, मुझे बस उस टैब के लिए एक आईडी चाहिए, जिसमें मैं हूं। यह यादृच्छिक या अनुक्रमित संख्या या डेट-टाइम स्टैंप हो सकता है, जब तक कि यह वही रहता है टैब का जीवनजावास्क्रिप्ट में ब्राउज़र टैब की पहचान करने का कोई तरीका?

मेरे पास एक क्लाइंट साइड ऐप है जो रिमोट सर्वर से HTTP कनेक्शन पर बोश बनाता है, और यदि मैं इसे कई टैब में खोलता हूं, तो प्रत्येक इंस्टेंस को अपनी अनूठी आईडी या ऐप विफल होने की आवश्यकता होती है, इसलिए मुझे बस कुछ अद्वितीय नंबर चाहिए जो टैब के साथ तब तक जुड़ा हुआ है जब तक कि टैब मौजूद न हो (यानी कुछ ऐसा जो पृष्ठ को रीफ्रेश करता है, क्योंकि मैं इस ऐप को प्रदान करने वाली साइट पर नेविगेट करता हूं)। ऐसा कोई ब्रेनर जैसा लगता है जो ब्राउज़र में उपलब्ध होना चाहिए, जैसे window.tabId - मुझे बस इतना ही चाहिए। मुझे एक गंभीर विकास ब्लॉक मिला है क्योंकि मैं इस सरल, सरल, सरल समाधान को दूर नहीं कर सकता जो अस्तित्व में प्रतीत नहीं होता है। एक रास्ता होना चाहिए (उस पर एक क्रॉस-ब्राउज़र समाधान)।

कोई विचार?

उत्तर

4

आप जावास्क्रिप्ट के साथ टैब आईडी नहीं प्राप्त कर सकते हैं, कभी भी कुछ समाधान है जो उपयोगकर्ता को नए टैब खोलने पर विभिन्न सत्र/कुकीज़ का उपयोग करने में आपकी मदद कर सकता है।

कुछ संदर्भ:

Get Browser Tab Index/Id

get urls of firefox tabs from firefox extension

How to differ sessions in browser-tabs?

Get a unique session in each browser tab

asp.net - session - multiple browser tabs - different sessions?

9

आपको एचटीएमएल 5 का उपयोग करना होगा, लेकिन एक यादृच्छिक guid के साथ संयुक्त sessionStorage जो आप चाहते हैं वह प्रतीत होता है।

+1

नंबर दो बार हो सकता है, भले ही वे बेतरतीब ढंग से उठाया जाता है, नहीं? तो एक मौका है कि दो टैबों में एक ही संख्या हो सकती है। मैंने सोचा होगा कि स्थानीय स्टोरेज में एक सीरियल नंबर बेहतर काम करेगा - जब आप एक नए टैब में पेज खोलते हैं, तो संख्या बढ़ाएं और सत्र स्टोरेज में स्टोर करें। –

+0

@ मैक्सवाटरमैन: विभिन्न ब्राउज़रों, निजी टैब, समय बदल रहा है ... धारावाहिक यादृच्छिक से अधिक गारंटी नहीं है। एक ग्रिड बनाने के कई तरीके हैं जो जितना अच्छा हो उतना अच्छा होगा - टकराव का मौका इतना छोटा है कि वह परेशान होने के लायक नहीं है। – jmoreno

1

संभावित समाधानों में से एक "window.name" संपत्ति का उपयोग कर रहा है, लेकिन मैं इसका उपयोग नहीं करना चाहता क्योंकि कोई और इसका उपयोग कर सकता है।

मुझे सत्र समाधान का उपयोग करके एक और संभावित समाधान मिला:। यह एफएफ 3.5 +, क्रोम 4 +, सफारी 4 +, ओपेरा 10.5 +, और आईई 8 + द्वारा समर्थित है।

var tabID = sessionStorage.tabID ? sessionStorage.tabID : sessionStorage.tabID = Math.random(); 

अद्यतन:
कुछ मामलों में, आप एक ही sessionStorage हो सकता है

16

SessionStorage है, तो आप sessionStorage में एक यादृच्छिक संख्या को परिभाषित करने और पहली बार में इसे पाने अगर मौजूद कर सकते हैं प्रति टैब/विंडो है एकाधिक टैब में (उदाहरण के लिए जब आप टैब डुप्लिकेट करते हैं)। उस मामले में, निम्नलिखित कोड मई में मदद करता है:

var tabID = sessionStorage.tabID && sessionStorage.closedLastTab !== '2' ? sessionStorage.tabID : sessionStorage.tabID = Math.random(); 
sessionStorage.closedLastTab = '2'; 
$(window).on('unload beforeunload', function() { 
     sessionStorage.closedLastTab = '1'; 
}); 
+0

यह कोड बहुत मदद करता है, लेकिन जब आप विंडो –

+0

डुप्लिकेट करते हैं तो डेटा संग्रहण जारी रहता है सत्र संग्रहण IE में नहीं रहता है। –

+2

यादृच्छिक रूप से संख्याओं को चुनना यह सुनिश्चित नहीं करता है कि वे अद्वितीय हैं (यानी 0 और 99 के बीच यादृच्छिक संख्या चुनें, और हमेशा 11 बार कई बार संभव है)। स्थानीय स्टोरेज में सीरियल नंबर क्यों नहीं? –

0

अगर वहाँ 2 मिलीसेकंड के भीतर 3 टैब नहीं है यदि कोई उपयोगकर्ता प्रारंभिक के किसी भी बाधाओं, एक टाइमस्टैम्प का उपयोग करें और स्टोर है कि window.name में हैं और उसका उपयोग कुंजी के रूप में कर सकता है आपके लुकअप में Window.name मान तब तक टैब के साथ रहेगा जब तक कि यह बंद न हो जाए।

Timestamp

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