document.domainविधि
ध्यान दें कि यह एक iframe विधि है, जो मौजूदा डोमेन के प्रत्यय के लिए document.domain का मान सेट करती है। यदि ऐसा होता है, तो छोटे डोमेन का उपयोग बाद की मूल जांच के लिए किया जाता है। उदाहरण के लिए, http://store.company.com/dir/other.htmlनिम्नलिखित कथन को निष्पादित करने पर दस्तावेज़ में एक स्क्रिप्ट मान लें :
document.domain = "company.com";
उस कथन के क्रियान्वयन के बाद, पृष्ठ मूल जांच के साथ पारित होगा http://company.com/dir/page.html। हालांकि, एक ही तर्क द्वारा, company.com सेट नहीं कर सका document.domain करने के लिए othercompany.com।
इस पद्धति के साथ, आपको मुख्य डोमेन पर एक पृष्ठ पर उप-डोमेन पर उप-डोमेन पर दिए गए iframe से जावास्क्रिप्ट को निकालने की अनुमति होगी। यह विधि क्रॉस-डोमेन संसाधनों के लिए अनुकूल नहीं है क्योंकि फ़ायरफ़ॉक्स जैसे ब्राउज़र आपको document.domainपूरी तरह से विदेशी डोमेन में बदलने की अनुमति नहीं देंगे ।
स्रोत: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
क्रॉस-ओरिजिनल रिसोर्स शेयरिंग विधि
क्रॉस-ऑरिजनल रिसोर्स शेयरिंग (कोर) एक W3C वर्किंग ड्राफ्ट है जो यह परिभाषित करता है कि मूल के स्रोतों तक पहुँचने के दौरान ब्राउज़र और सर्वर को कैसे संवाद करना चाहिए। CORS के पीछे मूल विचार यह है कि अनुरोध या प्रतिक्रिया सफल या विफल हो जाए, यह निर्धारित करने के लिए ब्राउज़र और सर्वर दोनों को एक-दूसरे के बारे में पर्याप्त जानने के लिए कस्टम HTTP हेडर का उपयोग करना है।
एक साधारण अनुरोध के लिए, जो GETया तो POSTकस्टम हेडर का उपयोग करता है या जिसका शरीर है text/plain, अनुरोध को एक अतिरिक्त हेडर के साथ भेजा जाता है Origin। उत्पत्ति शीर्षलेख में अनुरोध पृष्ठ का मूल (प्रोटोकॉल, डोमेन नाम और पोर्ट) होता है ताकि सर्वर आसानी से यह निर्धारित कर सके कि उसे कोई प्रतिक्रिया प्रदान करनी चाहिए या नहीं। एक उदाहरण Originहैडर इस तरह दिख सकता है:
Origin: http://www.stackoverflow.com
यदि सर्वर यह निर्णय लेता है कि अनुरोध को अनुमति दी जानी चाहिए, तो यह एक Access-Control-Allow-Originहेडर को उसी मूल को वापस भेज देता है जो भेजा गया था या *यदि यह एक सार्वजनिक संसाधन है। उदाहरण के लिए:
Access-Control-Allow-Origin: http://www.stackoverflow.com
यदि यह शीर्ष लेख गायब है, या उत्पत्ति मेल नहीं खाती है, तो ब्राउज़र अनुरोध को अस्वीकार कर देता है। यदि सब कुछ ठीक है, तो ब्राउज़र अनुरोध को संसाधित करता है। ध्यान दें कि न तो अनुरोधों और न ही प्रतिक्रियाओं में कुकी जानकारी शामिल है।
मोज़िला टीम ने कोर के बारे में अपने पोस्ट में सुझाव दिया है कि आपको यह withCredentials निर्धारित करने के लिए संपत्ति के अस्तित्व की जांच करनी चाहिए कि क्या ब्राउज़र एक्सएचआर के माध्यम से कोर का समर्थन करता है। फिर आप XDomainRequestसभी ब्राउज़रों को कवर करने के लिए ऑब्जेक्ट के अस्तित्व के साथ जुड़ सकते हैं:
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var request = createCORSRequest("get", "http://www.stackoverflow.com/");
if (request){
request.onload = function() {
// ...
};
request.onreadystatechange = handler;
request.send();
}
ध्यान दें कि काम करने के लिए कोर विधि के लिए, आपको किसी भी प्रकार के सर्वर हेडर मैकेनिक तक पहुंचने की आवश्यकता है और बस किसी तीसरे पक्ष के संसाधन तक नहीं पहुंच सकते।
स्रोत: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
window.postMessageविधि
window.postMessage, जब बुलाया जाता है, MessageEventतो लक्ष्य विंडो में भेजा जा सकता है जब किसी भी लंबित स्क्रिप्ट को पूरा किया जाना चाहिए (जैसे कि घटना हैंडलर से शेष window.postMessageइवेंट हैंडलर, पहले से लंबित टाइमआउट, आदि) को कॉल किया जाए। MessageEventप्रकार संदेश, एक है dataसंपत्ति जो करने के लिए प्रदान पहला तर्क की स्ट्रिंग मान पर सेट है window.postMessageएक, originगुण विंडो बुला में मुख्य दस्तावेज़ के मूल करने के लिए इसी window.postMessageसमय में window.postMessageबुलाया गया था, और एक sourceसंपत्ति है जहाँ से खिड़की है जिसे window.postMessageकहा जाता है।
उपयोग करने के लिए window.postMessage, एक घटना श्रोता संलग्न होना चाहिए:
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
और एक receiveMessageसमारोह घोषित किया जाना चाहिए:
function receiveMessage(event)
{
// do something with event.data;
}
ऑफ-साइट iframe को भी ठीक से ईवेंट भेजना चाहिए postMessage:
<script>window.parent.postMessage('foo','*')</script>
कोई भी विंडो किसी भी समय किसी भी विंडो पर इस पद्धति को एक्सेस कर सकती है, चाहे वह विंडो में डॉक्यूमेंट के स्थान की परवाह किए बिना, संदेश भेजने के लिए। नतीजतन, संदेशों को प्राप्त करने के लिए उपयोग किए जाने वाले किसी भी ईवेंट श्रोता को मूल और संभवतः स्रोत गुणों का उपयोग करके पहले संदेश भेजने वाले की पहचान की जांच करनी चाहिए। यह समझा नहीं जा सकता है: और संभवत: गुणों की जांच करने में विफलता क्रॉस-साइट स्क्रिप्टिंग हमलों को सक्षम करती है।originsource
स्रोत: https://developer.mozilla.org/en/DOM/window.postMessage