क्या नए ब्राउज़र के लिए कई ब्राउज़र टैब और क्लाइंट स्टेट को संबोधित करने वाले ओपन-सोर्स जावास्क्रिप्ट लाइब्रेरी हैं? [बन्द है]


11

कुछ नई HTML5 विशेषताएँ हैं, जिन्होंने इसे हाल के ब्राउज़रों में बनाया है जो टैब, ब्राउज़र विंडो, समान डोमेन विंडो आदि के बीच राज्य को साझा करने की अनुमति देती हैं, इसलिए संभवतः वेब एप्लिकेशन को लिखना थोड़ा आसान हो जाता है जो बहुत सारे राज्य को बनाए रखता है। क्लाइंट और टैब और / या विंडो के बीच समझदारी से राज्य का प्रबंधन करता है।

वर्तमान में Backbone.js जैसी लाइब्रेरी हैं जो राज्य को एकल टैब या एकल विंडो में प्रबंधित करने में मदद कर सकती हैं। वहाँ अभी भी कुछ भी है कि कई टैब (या विंडोज़) के साथ मदद करता है वैश्विक राज्य, टैब विशिष्ट राज्य का प्रबंधन, और क्रॉस-टैब आयोजन उन सभी को सिंक करने के लिए सर्वर पर भरोसा किए बिना?


2
कुछ वेब एप्स (जैसे ट्रेलो) सभी क्लाइंट्स को सिंक करने के लिए वेबस्केट्स का उपयोग करके इसे बाईपास कर रहे हैं, चाहे वह एक ही ब्राउजर में हो या नहीं। लेकिन यह उपयोगी हो सकता है। अगर मैं इस तरह से एक पुस्तकालय लिख रहा था, तो मैं SharedWorkers के लिए एक पॉलीफ़िल के ऊपर एक पतली परत बनाऊंगा, क्योंकि SharedWorkers आपको यहाँ क्या चाहिए, लेकिन अभी तक अच्छी तरह से समर्थित नहीं है। इस काम को करने के लिए एक हैक लोकलस्टोरेज इवेंट्स है, जो तब भी फायर करते हैं जब टैब्स स्वतंत्र रूप से खोले जाते थे।
Mahemoff

1
मेरे कॉलेज शिक्षक ने मुझे कि सिखाया HTTP is great (and beutiful) because it is stateless। जब से मैंने उद्योग ज्वाइन किया है, मैं उस बीटूट की तलाश में हूँ, लेकिन उसे खोज नहीं सकता। हर कोई केवल उन राज्यों को रखने के बारे में बात करता है जिन्हें आप देखते हैं!
दीपन मेहता

@DipanMehta: यदि आप RFC2616 को देखते हैं, तो मुझे यकीन नहीं है कि आप "सुंदरता" भाग के बारे में अपने शिक्षक से सहमत होंगे :) हालाँकि मैं आपको देता हूँ कि "विशुद्ध रूप से स्टेटलेस" विचार वास्तव में बहुत अच्छा है और मुझे समस्याग्रस्त लगता है हम इसे
ब्रीच

स्टेटलेस और वेब एप्लिकेशन एक साथ अच्छी तरह से नहीं चलते हैं। कैरी स्टेट में लॉग इन होने जैसी छोटी चीजें। बहुत अच्छा है अगर आप सिर्फ उन लोगों के लिए काफी छोटी फ़ाइलों की सेवा कर रहे हैं जो उनसे पूछते हैं कि मुझे लगता है।
Psr

मैंने HTML5 ट्रिक का उपयोग करके आपकी वेबसाइट के सभी खुले टैब के बीच संवाद करने के लिए एक छोटी सी लाइब्रेरी लिखी ।
कैटमफेटामाइन

जवाबों:


3

संक्षिप्त जवाब:

आप वास्तव में एक टैब से दूसरे में राज्य की जानकारी नहीं दे सकते हैं ...

लंबा जवाब:

आप सही मायने में राज्य की जानकारी को एक टैब से दूसरे में नहीं भेज सकते हैं , क्योंकि यह सैंडबॉक्सिंग और सुरक्षा का एक बहुत गंभीर उल्लंघन होगा।

हालाँकि, आप अप्रत्यक्ष रूप से दो टैब के बीच राज्य को पास कर सकते हैं:

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

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


अद्यतन 1: जैसा कि किसी ने हटाने से पहले एक टिप्पणी में उल्लेख किया है (क्रेडिट नहीं दे सकता क्योंकि यह इनबॉक्स में नहीं दिखा, क्षमा करें)

HTML5 window.postMessageAPI का परिचय देता है।

एक कार्य उदाहरण के लिए, क्रॉस-विंडो मैसेजिंग पर जॉन रेजिग के ब्लॉग-पोस्ट देखें । और बहुत दिलचस्प बात यह है कि यदि आप इस पोस्ट पर टिप्पणियों को देखते हैं, तो आप नोटिस करेंगे कि किसी ने Malte नामक एक पुस्तकालय का उल्लेख किया है जिसे उन्होंने window.postMessageआधुनिक ब्राउज़रों पर उपयोग करने के लिए लिखा है, या पुराने ब्राउज़र पर एक कुकी-आधारित संस्करण।

अधिक विवरण और उदाहरणों के लिए इन्हें पढ़ें:

अपडेट 2:

ध्यान रखें कि, 2012-03-04 के अनुसार, HTML5 विनिर्देश अभी भी एक मसौदा है, इसलिए कुछ सुविधाओं को हटाया जा सकता है । इसलिए देखभाल के साथ उपयोग करें ...


मैं स्पष्ट रूप से गलत हूं, क्योंकि HTML5 वास्तव में window.postMessage API का परिचय देता है।
२२

यदि आप क्रॉस-विंडो मैसेजिंग और टिप्पणियों पर जॉन रेजिग के ब्लॉग-पोस्ट को पढ़ते हैं, तो आप नोटिस करेंगे कि किसी ने माल्टे को एक [पुस्तकालय] का उल्लेख किया है [3] उन्होंने इसे आधुनिक ब्राउज़रों पर उपयोग करने के लिए लिखा है, या इसके लिए एक कुकी-आधारित संस्करण पुराने ब्राउज़र, तो मेरी कुकी बात वह पागल नहीं थी।
२२

3

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


1

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

आपको localStorageIE के साथ कुछ मुद्दों पर भी विचार करना चाहिए :

  • मैंने IE8 में लोकलस्टोरेज के लिए कुछ परीक्षण किए हैं। स्थानीयस्टोरेज में कई हजारों बदलावों के बाद, एक ही मूल से खिड़कियां 'भंडारण' घटनाओं को प्राप्त करना बंद कर देती हैं। इससे भी अधिक, फिर आप एक ही लोकलस्टोरेज आइटम से पढ़ने की कोशिश करते हैं, विभिन्न विंडो में मान भिन्न हो सकते हैं। तो, मैं कहूंगा कि IE8 लोकलस्टोरेज का समर्थन नहीं करता है

  • IE9 और IE10 कॉल 'स्टोरेज' इवेंट हैंडलर भले ही लोकलस्टोरेज इस विंडो से बदला गया हो ( यह विनिर्देशन के विरुद्ध है )।

  • IE11 के साथ ज्ञात समस्याएँ भी हैं ।

मैंने हाल ही में इंटरविंडो कम्यूनिकेशन लाइब्रेरी प्रकाशित की है (सभी विशेषताओं को रीडमी में वर्णित किया गया है)। यह थ्रेड-सुरक्षित डेटा साझाकरण, ईवेंट प्रसारण प्रदान करता है। यह कुछ IE मुद्दों को भी हल करता है (IE8 निश्चित रूप से समर्थित नहीं है, विभिन्न मूल माता-पिता के अंदर iframe के साथ IE11 बग केवल IE फिक्सिंग द्वारा हल किया जा सकता है - IE11 अपडेट की प्रतीक्षा कर रहा है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.