दिलचस्प पोस्ट
पायथन में लगभग समानता के लिए फ्लोट की तुलना करने का सबसे अच्छा तरीका क्या है? जावास्क्रिप्ट का उपयोग करते हुए इनपुट बॉक्स मूल्यों से कुल योग कैसे प्राप्त होते हैं? Scanf (या) printf में गलत प्रारूप विनिर्देशक C # कंसोल अनुप्रयोगों को स्वचालित रूप से बंद करने से कैसे रोकें? मैं कैसे देखता हूँ। sscanf के साथ रिक्त स्थान के साथ एक स्ट्रिंग पढ़ना कॉलम चौड़ाई को शून्य पर सेट नहीं कर सका, अर्थात अदृश्य नहीं किया गया स्तंभ छवि के माध्यम से परिपत्र में xml HttpPost के भीतर से चयनित चेकबॉक्स को कैसे पता चलाना कार्रवाई विधि है? पैकेज के भीतर मॉड्यूल के सदस्यों को कैसे आयात करें जावास्क्रिप्ट अर्रेबफर को द्विआधारी नोडजेएस बफर को कन्वर्ट करें Google मानचित्र API – मार्करों को निकाल रहा है जावास्क्रिप्ट में एक तारीख को बढ़ाना पैरामीटर और तर्क के बीच का अंतर डिज्स्स्ट्रा के एल्गोरिथम का उपयोग करने वाले नकारात्मक भार

ब्राउज़र टैब / विंडो के बीच जावास्क्रिप्ट संचार

एक ही ब्राउज़र के टैब / विंडो के बीच जावास्क्रिप्ट संवाद करने का सबसे विश्वसनीय तरीका क्या है? उदाहरण के लिए, जब टैब 2 ऑडियो प्लेबैक शुरू करता है, तो टैब 1 किसी तरह इस बारे में जानता है और इसे प्लेयर को रोक सकता है

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

कोई विचार? धन्यवाद

वेब के समाधान से एकत्रित समाधान "ब्राउज़र टैब / विंडो के बीच जावास्क्रिप्ट संचार"

कुकीज़ का उपयोग करते हुए आप ब्राउज़र विंडो (और टैब के बीच) के बीच संवाद कर सकते हैं।

यहां प्रेषक और रिसीवर का एक उदाहरण है:

sender.html

<h1>Sender</h1> <p>Type into the text box below and watch the text appear automatically in the receiver.</p> <form name="sender"> <input type="text" name="message" size="30" value=""> <input type="reset" value="Clean"> </form> <script type="text/javascript"><!-- function setCookie(value) { document.cookie = "cookie-msg-test=" + value + "; path=/"; return true; } function updateMessage() { var t = document.forms['sender'].elements['message']; setCookie(t.value); setTimeout(updateMessage, 100); } updateMessage(); //--></script> 

receiver.html:

 <h1>Receiver</h1> <p>Watch the text appear in the text box below as you type it in the sender.</p> <form name="receiver"> <input type="text" name="message" size="30" value="" readonly disabled> </form> <script type="text/javascript"><!-- function getCookie() { var cname = "cookie-msg-test="; var ca = document.cookie.split(';'); for (var i=0; i < ca.length; i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(cname) == 0) { return c.substring(cname.length, c.length); } } return null; } function updateMessage() { var text = getCookie(); document.forms['receiver'].elements['message'].value = text; setTimeout(updateMessage, 100); } updateMessage(); //--></script> 

अधिक आधुनिक समाधान के लिए https://stackoverflow.com/a/12514384/270274 देखें

उद्धरण:

मैं स्थानीय localStorage का उपयोग करते हुए प्रश्न में उल्लिखित साझा स्थानीय डेटा समाधान पर चिपका रहा हूं I यह विश्वसनीयता, प्रदर्शन और ब्राउज़र संगतता के संदर्भ में सबसे अच्छा समाधान माना जाता है।

localStorage सभी आधुनिक ब्राउज़रों में कार्यान्वित किया गया है

जब अन्य टैब्स localStorage परिवर्तन करता है, तो storage इवेंट आग लग जाता है। यह संचार प्रयोजनों के लिए काफी आसान है

संदर्भ:
http://dev.w3.org/html5/webstorage/
http://dev.w3.org/html5/webstorage/#the-storage-event

मुझे नहीं लगता कि आपको कुकीज़ चाहिए प्रत्येक दस्तावेज़ का जेएस कोड अन्य दस्तावेज़ तत्वों तक पहुंच सकता है। तो आप डेटा साझा करने के लिए उन्हें सीधे उपयोग कर सकते हैं आपकी पहली खिड़की w1 w2 खोलता है और संदर्भ को बचाती है

 var w2 = window.open(...) 

W2 में आप खिड़की के सलामी बल्लेबाज संपत्ति का उपयोग कर w1 तक पहुंच सकते हैं।

आप यह स्थानीय स्टोरेज एपीआई के माध्यम से कर सकते हैं ध्यान दें कि यह केवल 2 टैब के बीच काम करता है आप एक ही पृष्ठ पर प्रेषक और रिसीवर दोनों नहीं डाल सकते हैं:

प्रेषक पृष्ठ पर:

 localStorage.setItem("someKey", "someValue"); 

रिसीवर पृष्ठ पर

  $(document).ready(function () { window.addEventListener('storage', storageEventHandler, false); function storageEventHandler(evt) { alert("storage event called key: " + evt.key); } }); 

यदि आप बच्चे-माता-पिता के रिश्ते हैं, तो आप खिड़कियों के बीच संवाद कर सकते हैं (टैब या नहीं)

एक बाल विंडो बनाएं और अपडेट करें:

 <html> <head> <title>Cross window test script</title> <script> var i = 0; function open_and_run() { var w2 = window.open("", "winCounter"); var myVar=setInterval(function(){myTimer(w2)},1000); } function myTimer(w2) { i++; w2.document.body.innerHTML="<center><h1>" + i + "</h1><p></center>"; } </script> </head> <body> Click to open a new window <button onclick="open_and_run();">Test This!</button> </body> </html> 

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

इसे यहां क्रिया में देखें: https://jsbin.com/cokipotajo/edit?html,js,output

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

विंडो के नीचे (डब्ल्यू 1) दूसरी विंडो खुलती है (डब्लू 2)। कोई भी विंडो दूसरे विंडो से / संदेश भेज सकता / भेज सकता है इसलिए हमें आदर्श रूप से यह सत्यापित करना चाहिए कि संदेश विंडो (w2) से उत्पन्न हुआ, जिसे हमने खोला था।

W1 में

 var w2 = window.open("abc.do"); window.addEventListener("message", function(event){ console.log(event.data); }); 

W2 में (abc.do)

 window.opener.postMessage("Hi! I'm w2", "*"); 

Broadcast Channel API नामक एक प्रयोगात्मक तकनीक भी है जो विशेष रूप से समान मूल के साथ-साथ विभिन्न ब्राउज़र संदर्भों के बीच संचार के लिए डिज़ाइन की गई है। आप किसी अन्य ब्राउज़र संदर्भ से संदेशों को सन्दर्भ किए बिना संदेश पोस्ट कर सकते हैं और प्राप्त कर सकते हैं:

 var channel = new BroadcastChannel("foo"); channel.onmessage = function( e ) { // Process messages from other contexts. }; // Send message to other listening contexts. channel.postMessage({ value: 42, type: "bar"}); 

जाहिर है यह अनुभवात्मक तकनीक है और अभी तक सभी ब्राउज़रों में समर्थित नहीं है।

एचटीएमएल 5 स्थानीय स्टोरेज का उपयोग करने के लिए अलग तरह से मिला, मैंने एक लाइब्रेरी बनाई है, जैसे कि एपीआई:

 sysend.on('foo', function(message) { console.log(message); }); var input = document.getElementsByTagName('input')[0]; document.getElementsByTagName('button')[0].onclick = function() { sysend.broadcast('foo', {message: input.value}); }; 

यह सभी अन्य पृष्ठों पर संदेश भेजेगा लेकिन वर्तमान के लिए नहीं।

संपादित करें: फ्लैश के साथ आप किसी भी खिड़की, किसी भी ब्राउज़र के बीच संवाद कर सकते हैं (हाँ, एफएफ से आईई रनटाइम पर) .. फ्लैश के उदाहरण (शॉकव्व्व / सक्रियएक्स)