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>
कोई भी विंडो किसी भी समय किसी भी विंडो पर इस पद्धति को एक्सेस कर सकती है, चाहे वह विंडो में डॉक्यूमेंट के स्थान की परवाह किए बिना, संदेश भेजने के लिए। नतीजतन, संदेशों को प्राप्त करने के लिए उपयोग किए जाने वाले किसी भी ईवेंट श्रोता को मूल और संभवतः स्रोत गुणों का उपयोग करके पहले संदेश भेजने वाले की पहचान की जांच करनी चाहिए। यह समझा नहीं जा सकता है: और संभवत: गुणों की जांच करने में विफलता क्रॉस-साइट स्क्रिप्टिंग हमलों को सक्षम करती है।origin
source
स्रोत: https://developer.mozilla.org/en/DOM/window.postMessage