क्या यह जांचने का एक "सुरक्षित" तरीका है कि वास्तव में AJAX विधियों का उपयोग करने से पहले एक ही मूल नीति किसी URL पर लागू होती है या नहीं? यहाँ मैं क्या है:
function testSameOrigin(url) {
var loc = window.location,
a = document.createElement('a');
a.href = url;
return a.hostname == loc.hostname &&
a.port == loc.port &&
a.protocol == loc.protocol;
}
यह बात करने का एक सुरक्षित और विश्वसनीय तरीका है, बशर्ते आप कर रहे हैं (या बल्कि नहीं कर) कुछ बातें है।
इस प्रकार के काम, लेकिन यह विकिपीडिया लेख के आधार पर एक मैनुअल अनुमान है।
यह पूरी तरह से "सामान्य" परिस्थितियों में काम करना चाहिए। यदि आप cross-domain scripting का उपयोग करने की योजना बना रहे हैं तो इसे संशोधित करने की आवश्यकता होगी।
यदि आप अपनी स्क्रिप्ट में document.domain
संशोधित करते हैं, उदाहरण के लिए "foo.example.com" और "bar.example.com" से "उदाहरण" में।कॉम http://example.com ", जहां वास्तव में यह true
लौटना चाहिए" अपने testSameOrigin
समारोह के लिए false
वापसी होगी "।
आप document.domain
को संशोधित करने पर योजना बना रहे हैं, तो आप बस जोड़ सकते हैं अपनी स्क्रिप्ट में उस के लिए एक जांच जोड़ें।
यदि आप क्रॉस-डोमेन संचार की अनुमति देने के लिए सीओआरएस (उपर्युक्त लिंक देखें) का उपयोग करने की योजना बना रहे हैं, तो यह झूठी नकारात्मक भी लौटाएगा। लेकिन यदि आप सीओआरएस का उपयोग कर रहे हैं, तो आपके पास डोमेन की एक सूची होगी जिसके साथ आप संवाद कर सकते हैं, और आप उस सूची में भी इस सूची को जोड़ सकते हैं।
क्या प्री-चेकिंग क्रॉस डोमेन भत्ता का बेहतर तरीका है? jQuery उपयोग करने के लिए ठीक है।
शायद नहीं
, हालांकि यह उल्लेख के लायक है कि आप क्या स्टीव जवाब से कंसोल में देख रहे हैं "पर्यवेक्षक के दुविधा" ... उन त्रुटियों देखो की तरह वे का निरीक्षण करने की कोशिश कर कंसोल से उत्पन्न कर रहे हैं हो सकता है हो सकता है अन्य खिड़की, लिपि से जरूरी नहीं है।
मान लें कि आप document.domain
के साथ गड़बड़ नहीं कर रहे हैं या सीओआरएस का उपयोग कर रहे हैं, तो आपका मूल समाधान शायद बेहतर है, क्योंकि यह निर्धारित करने के लिए अतिरिक्त अनुरोध करने की आवश्यकता नहीं है कि सर्वर उपलब्ध है या नहीं। भले ही आप कुछ क्रॉस-डोमेन स्क्रिप्टिंग कर रहे हों, फिर भी आपके पास समायोजित करने के लिए आपके पास फ़ंक्शन को संशोधित करना शायद आपकी सबसे अच्छी शर्त है।
यदि आप एक क्रॉस डोमेन अनुरोध करते हैं तो यह 'readystate = 4' और' statuscode = 0' के साथ विफल हो जाएगा, जो निरस्त अनुरोध के समान है। चूंकि आपको निरस्त अनुरोधों के खिलाफ सुरक्षा करने की आवश्यकता है, फिर भी आपको इस चेक की आवश्यकता क्यों होगी? मुझे लगता है कि इस सुरक्षा उपाय को बाहर से लागू किया गया है, आपके पास इसका कोई नियंत्रण नहीं है, इसलिए पर्यावरण के भीतर से कोई भी जांच परिभाषा गलत है। इसलिए मुझे नहीं लगता कि आपको कभी इसकी जांच करनी चाहिए, बस अनुरोध विफल होने दें। – Halcyon