2011-12-25 17 views
5

मैं एक वेबपेज बना रहा हूं जो बाहरी सर्वेक्षण लेने के एक प्रकार का उपयोग करता है। मुझे आश्चर्य हुआ कि क्या window.open विधि का उपयोग करते समय, क्या आप बता सकते हैं कि आपकी नई विंडो में 404 या पेज टाइमआउट लोड करने का प्रयास कर रहा था या नहीं?window.open .. यह बताने का एक तरीका है कि विंडो में टाइमआउट या 404 था या नहीं?

http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

कुछ तरीके हैं जिन्हें आप उस पर कैसे निर्भर करता है काम कर सकते हैं:

child = window.open(href, 'window'); 
     setTimeout(function() { 
      // Do some backend processing if child window is still open and no 404/timeout 
     }, 10000); 
+0

एक ही डोमेन के भीतर पॉपअप है और क्या आपके पास इसकी सामग्री पर नियंत्रण है? – sled

+0

नहीं, नई विंडो एक बाहरी यूआरएल होगी, और सामग्री पर कोई नियंत्रण नहीं होगा – Wilson212

उत्तर

1

यह करना बहुत मुश्किल बात है। आपको सुरक्षा मुद्दों से निपटना होगा (जेएस में क्रॉस डोमेन एक्सेस वर्जित है)। लेकिन मुझे लगता है इस समारोह चाल कर सकते हैं:

child = window.open(href, 'window'); 
     setTimeout(function() { 
      try { 
       var foo = child.location; 
      } 
      catch (err) { 
       // It has loaded. Manage that. 
       return; 
      } 
      // Still loading. Code here. 
      } 
     }, 10000); 

स्पष्टीकरण: चाइल्ड विंडो के location तत्व तक पहुँचने का प्रयास। यदि खिड़की लोड हो गई है, तो इसे एक्सेस करने का प्रयास अपवाद फेंक देगा (क्रॉस डोमेन जेएस एक्सेस वर्जित है) ताकि आप इसे प्रबंधित कर सकें। लेकिन अगर आप उस स्थान तक पहुंच सकते हैं जिसका शायद अर्थ होगा कि यह अभी भी लोड हो रहा है।

मुख्य समस्या यह है कि, इस कोड के साथ, आप केवल लोड होने पर या अंतर नहीं कर सकते हैं, इसलिए मुझे लगता है कि आप केवल टाइमआउट की जांच कर सकते हैं। मुझे लगता है कि 404 त्रुटि की जांच लगभग असंभव है क्योंकि जेएस सुरक्षा प्रतिबंध आपको बाहरी पृष्ठ के स्थान या सामग्री को प्राप्त करने की अनुमति नहीं देते हैं।

1

क्रॉस-डोमेन ajax अनुरोध पर एक नज़र डालें:

यहाँ मैं अब तक किया है रिमोट साइट संरचित है, लेकिन कम से कम आप यह जांच सकते हैं कि पॉपअप लॉन्च करने से पहले पृष्ठ मौजूद है (हालांकि यह गारंटी नहीं देगा कि यह पॉपअप में लोड होता है)।

वैकल्पिक रूप से, पॉपअप को एक स्थानीय स्क्रिप्ट (php, आदि) लोड करें जो पहले cUrl या अन्य रिमोट चेक करता है ... क्या यह हेडर वापस लौटा है, और फिर - यदि सब अच्छा है - यह हेडर को आगे भेजता है रिमोट साइट पर। यदि कोई त्रुटि कोड लौटाया जाता है, तो आपके पास पॉपअप विंडो एक स्थानीय HTML/js पृष्ठ लोड करती है जिसमें एक स्क्रिप्ट है जो सलामी बल्लेबाज से बात कर सकती है ताकि यह पता चल सके कि यह विफल हो गया है।

संबंधित मुद्दे

 संबंधित मुद्दे