खोज…


वाक्य - विन्यास

  • windowObject.postMessage(message, targetOrigin, [transfer]);
  • window.addEventListener("message", receiveMessage);

पैरामीटर

पैरामीटर
संदेश
targetOrigin
स्थानांतरण optional

शुरू करना

.PostMessage () क्या है, हम इसका उपयोग कब और क्यों करते हैं

.postMessage() विधि क्रॉस-ऑरिजिन स्क्रिप्ट के बीच संचार को सुरक्षित रूप से अनुमति देने का एक तरीका है।

आम तौर पर, दो अलग-अलग पृष्ठ, केवल जावास्क्रिप्ट का उपयोग करते हुए एक दूसरे के साथ सीधे संवाद कर सकते हैं जब वे एक ही मूल के होते हैं, भले ही उनमें से एक दूसरे में एम्बेडेड हो (जैसे iframes ) या एक दूसरे के अंदर से खोला जाता है (जैसे window.open() )। .postMessage() , आप सुरक्षित रहते हुए भी इस प्रतिबंध के आसपास काम कर सकते हैं।

आप केवल .postMessage() उपयोग कर सकते हैं जब आपके पास दोनों पृष्ठों के जावास्क्रिप्ट कोड तक पहुँच हो। चूंकि रिसीवर को प्रेषक को मान्य करने और संदेश को तदनुसार संसाधित करने की आवश्यकता है, आप केवल इस पद्धति का उपयोग दो लिपियों के बीच संवाद करने के लिए कर सकते हैं, जिनकी आपके पास पहुंच है।

हम चाइल्ड विंडो को संदेश भेजने के लिए एक उदाहरण बनाएंगे और उन संदेशों को चाइल्ड विंडो पर प्रदर्शित किया जाएगा। माता-पिता / प्रेषक पृष्ठ को http://sender.com माना जाएगा और उदाहरण के लिए बाल / रिसीवर पृष्ठ http://receiver.com माना जाएगा।

संदेश भेजना

किसी अन्य विंडो में संदेश भेजने के लिए, आपको इसकी window ऑब्जेक्ट के लिए एक संदर्भ होना चाहिए। window.open() नई खोली गई विंडो का संदर्भ ऑब्जेक्ट लौटाता है। अन्य तरीकों के लिए एक विंडो ऑब्जेक्ट का संदर्भ प्राप्त करने के लिए, यहां अन्य otherWindow पैरामीटर के तहत स्पष्टीकरण देखें।

var childWindow = window.open("http://receiver.com", "_blank");

एक textarea और एक send button जोड़ें जिसका उपयोग बाल खिड़की पर संदेश भेजने के लिए किया जाएगा।

<textarea id="text"></textarea>
<button id="btn">Send Message</button>

button क्लिक करने पर .postMessage(message, targetOrigin) का उपयोग करके textarea का पाठ भेजें।

var btn = document.getElementById("btn"),
    text = document.getElementById("text");

btn.addEventListener("click", function () {
    sendMessage(text.value);
    text.value = "";
});

function sendMessage(message) {
    if (!message || !message.length) return;
    childWindow.postMessage(JSON.stringify({
        message: message,
        time: new Date()
    }), 'http://receiver.com');
}

एक साधारण स्ट्रिंग के बजाय JSON ऑब्जेक्ट को भेजने और प्राप्त करने के लिए, JSON.stringify() और JSON.parse() विधियों का उपयोग किया जा सकता है। एक Transfarable Object के तीसरे वैकल्पिक पैरामीटर के रूप में दिया जा सकता है .postMessage(message, targetOrigin, transfer) विधि है, लेकिन ब्राउज़र समर्थन अभी भी आधुनिक ब्राउज़रों में भी कमी है।

इस उदाहरण के लिए, चूंकि हमारे रिसीवर को http://receiver.com पृष्ठ माना जाता है, इसलिए हम इसके url को targetOrigin रूप में targetOrigin । संदेश भेजने के लिए इस पैरामीटर का मान childWindow ऑब्जेक्ट की origin से मेल खाना चाहिए। wildcard रूप में * का उपयोग करना संभव है लेकिन wildcard उपयोग से बचने के लिए अत्यधिक अनुशंसा की जाती है और सुरक्षा कारणों से रिसीवर के विशिष्ट मूल के लिए हमेशा इस पैरामीटर को सेट करें।

संदेश प्राप्त करना, मान्य करना और संसाधित करना

इस भाग के तहत कोड रिसीवर पेज में डाला जाना चाहिए, जो हमारे उदाहरण के लिए http://receiver.com

message event प्राप्त करने के लिए, window की message event सुनी जानी चाहिए।

window.addEventListener("message", receiveMessage);

जब एक संदेश प्राप्त होता है तो सुरक्षा के आश्वासन के साथ कुछ कदम उठाए जाने चाहिए

  • भेजने वाले को मान्य करें
  • संदेश को मान्य करें
  • संदेश को संसाधित करें

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

function receiveMessage(ev) {
    //Check event.origin to see if it is a trusted sender.
    //If you have a reference to the sender, validate event.source
    //We only want to receive messages from http://sender.com, our trusted sender page.
    if (ev.origin !== "http://sender.com" || ev.source !== window.opener)
        return;

    //Validate the message
    //We want to make sure it's a valid json object and it does not contain anything malicious 
    var data;
    try {
        data = JSON.parse(ev.data);
        //data.message = cleanseText(data.message) 
    } catch (ex) {
        return;
    }

    //Do whatever you want with the received message
    //We want to append the message into our #console div
    var p = document.createElement("p");
    p.innerText = (new Date(data.time)).toLocaleTimeString() + " | " + data.message;
    document.getElementById("console").appendChild(p);
}

इसके उपयोग को दर्शाने वाले JS Fiddle के लिए यहां क्लिक करें।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow