2012-06-07 15 views
21

में प्रदर्शित होने से पहले मौजूद है या नहीं, मैं जावास्क्रिप्ट का उपयोग कर रहा हूं ताकि iframe src को गतिशील यूआरएल पास किया जा सके। लेकिन कभी-कभी यूआरएल मौजूद नहीं होता है, मैं पहले से मौजूद गैर-मौजूद यूआरएल का पता कैसे लगा सकता हूं, ताकि मैं 404 त्रुटि वाले आईफ्रेम को छुपा सकूं।यह पता लगाने के लिए जावास्क्रिप्ट का उपयोग कर रहा है कि यूआरएल आईफ़्रेम

उत्तर

2

यदि आप 200 बार वापस प्राप्त करते हैं तो इसका अर्थ यह है कि पृष्ठ पर मौजूद है, तो आप पेज पर एक सरल प्राप्त कर सकते हैं और कर सकते हैं। इसे आज़माएं (jQuery का उपयोग करके), फ़ंक्शन सफल पृष्ठ लोड पर सफलता कॉलबैक फ़ंक्शन है। ध्यान दें कि यह केवल XSS को रोकने के लिए आपके डोमेन के भीतर की साइटों पर काम करेगा। अन्य डोमेन प्रबंधित करने पर सर्वर साइड

$.get(
    yourURL, 
    function(data, textStatus, jqXHR) { 
     //load the iframe here... 
    } 
); 
23

Use a XHR and see if it responds you a 404 or not.

var request = new XMLHttpRequest(); 
request.open('GET', 'http://www.mozilla.org', true); 
request.onreadystatechange = function(){ 
    if (request.readyState === 4){ 
     if (request.status === 404) { 
      alert("Oh no, it does not exist!"); 
     } 
    } 
}; 
request.send(); 

है लेकिन लगता है कि यह केवल एक ही मूल पर काम करेंगे होगा। किसी अन्य होस्ट के लिए, आपको ऐसा करने के लिए use a server-side language करना होगा, जिसे आपको स्वयं ही समझना होगा।

+7

'लेकिन ध्यान दें कि यह केवल उसी उत्पत्ति पर ही काम करेगा। –

+0

मैं क्रोम का उपयोग कर रहा हूं, क्या यह काम करेगा? – Mario

+0

@ मारियो - हां, जब तक यह वही मूल मूल नीति के कारण समान उत्पत्ति में है। –

2

आप AJAX के माध्यम से यूआरएल का परीक्षण कर सकते हैं और स्थिति कोड पढ़ सकते हैं - यह है कि यूआरएल एक ही डोमेन में है।

यदि यह एक दूरस्थ डोमेन है, तो आप अपने डोमेन पर have a server script देख सकते हैं एक दूरस्थ URL देखें।

36

मेरी कम प्रतिष्ठा के कारण मैं डेरेक 朕 會 功夫 के उत्तर पर टिप्पणी नहीं कर सका। मैंने उस कोड को आजमाया है और यह अच्छी तरह से काम नहीं करता है। डेरेक 朕 會 功夫 के कोड पर तीन मुद्दे हैं।

  1. पहले उस समय async अनुरोध भेजने और उसके संपत्ति 'का दर्जा' बदलने के लिए धीमी अगले अभिव्यक्ति पर अमल करने से है - अगर (request.status === "404")। तो अनुरोध। स्टेटस अंततः, इंटरनेट बैंड के कारण, स्थिति 0 (शून्य) पर बने रहेंगे, और यदि नीचे दिए गए कोड को प्राप्त नहीं किया जाएगा। इसे ठीक करने के लिए आसान है: AJAX अनुरोध के खुले विधि पर 'सत्य' को 'झूठी' में बदलें। इससे आपके कोड पर एक संक्षिप्त (या नहीं) ब्लॉक होगा (सिंक्रोनस कॉल के कारण), लेकिन अगर परीक्षण पर पहुंचने से पहले अनुरोध की स्थिति बदल जाएगी।

  2. दूसरा यह है कि स्थिति एक पूर्णांक है। '===' जावास्क्रिप्ट तुलना ऑपरेटर का उपयोग करके आप तुलना करने की कोशिश कर रहे हैं यदि बाएं तरफ ऑब्जेक्ट दाएं तरफ एक जैसा है। इस काम को करने के लिए दो तरीके हैं:

    • 404 से घिरे उद्धरणों को हटाएं, इसे पूर्णांक बनाएं;
    • जावास्क्रिप्ट के ऑपरेटर'== 'का प्रयोग करें ताकि आप दो ऑब्जेक्ट समान हों तो परीक्षण करेंगे।
  3. तीसरा यह है कि ऑब्जेक्ट XMLHttpRequest केवल नए ब्राउज़र (फ़ायरफ़ॉक्स, क्रोम और आई 7 +) पर काम करता है। आपको लगता है कि टुकड़ा सभी ब्राउज़रों आप जिस तरह से W3Schools पता चलता है में क्या करना है पर काम करना चाहते हैं: w3schools ajax

कोड है कि वास्तव में मेरे लिए काम किया था:

var request; 
if(window.XMLHttpRequest) 
    request = new XMLHttpRequest(); 
else 
    request = new ActiveXObject("Microsoft.XMLHTTP"); 
request.open('GET', 'http://www.mozilla.org', false); 
request.send(); // there will be a 'pause' here until the response to come. 
// the object request will be actually modified 
if (request.status === 404) { 
    alert("The page you are trying to reach is not available."); 
} 
+3

प्लस 1 आपकी कम प्रतिष्ठा के कारण। (और महान जवाब :)) – silver

+3

नहीं नहीं। कृपया W3C से W3 स्कूलों में कुछ भी लिंक न करें। वे किसी भी तरह से संबद्ध नहीं हैं। – IE5Master

+0

बस ध्यान दें कि: मुख्य थ्रेड पर सिंक्रोनस XMLHttpRequest को अंतिम उपयोगकर्ता के अनुभव के हानिकारक प्रभावों के कारण बहिष्कृत किया गया है। अधिक सहायता के लिए, https://xhr.spec.whatwg.org/ देखें। – Aus

2

मैंने पाया इस में काम किया मेरी परिदृश्य।

jqXHR.success(), jqXHR.error(), और jqXHR.complete() jQuery 1.5 में पेश कॉलबैक विधियों को jQuery 1.8 के रूप में बहिष्कृत किया गया है। अपने कोड को अंतिम हटाने के लिए तैयार करने के लिए, jqXHR.done(), jqXHR.fail(), और jqXHR.always() का उपयोग करें।

$.get("urlToCheck.com").done(function() { 
    alert("success"); 
}).fail(function() { 
    alert("failed."); 
}); 
संबंधित मुद्दे