2016-04-04 5 views
6

निम्नलिखित कोड www.bing.com के स्थान में परिवर्तन मौसम रीडायरेक्ट की परवाह किए बिना 1 या किसी अन्य संख्या है बंद नहीं। अगर रीडायरेक्ट 1 है, तो यह "रीडायरेक्ट कर रहा है" लॉग करता है और फिर www.bing.com पर रीडायरेक्ट करता है। मेरा सबसे अच्छा अनुमान यह है कि जब href सेट किया जाता है तो एक बदलाव-घटना ट्रिगर होती है, लेकिन इसे निष्पादित करने से पहले कुछ टिक लगती हैं। इस बीच कोड की पहली पंक्ति अभी भी निष्पादित की गई है। या? क्या कोई भी होता है?क्यों की स्थापना करता है window.location.href स्क्रिप्ट निष्पादन

if (redirect == 1) { 
    console.log("is redirecting"); 
    window.location.href = "http://www.google.com"; 
} 

window.location.href = "http://www.bing.com"; 
+1

एक 'else' ब्लॉक – DanFromGermany

+0

दिलचस्प का उपयोग करें! एमडीएन [कहते हैं] (https://developer.mozilla.org/en-US/docs/Web/API/Window/location) कि "जब भी स्थान वस्तु पर कोई नया मान असाइन किया जाता है, तो URL का उपयोग करके एक दस्तावेज़ लोड किया जाएगा जैसे कि location.assign() को कॉल किया गया था "। क्या आपको .assign() के साथ एक ही व्यवहार मिलता है? –

+1

@DanFromGermany - मैंने वास्तव में इसे किसी और के साथ हल किया है, लेकिन यह मुझे खराब करता है, मुझे नहीं पता कि यह क्यों जारी रहता है – Bildsoe

उत्तर

2

मैं कहूंगा कि व्यवहार अनिर्धारित रहता है।

जब आप अपेक्षित यूआरएल window.location.href पर सेट करते हैं, तो वर्तमान पृष्ठ वास्तव में dying स्थिति में होगा। और इसके बाद लिखे गए कोड का नतीजा बस अप्रत्याशित है।

+0

लेकिन मरने वाले राज्य में कोड निष्पादन क्यों न रोकें? – Bildsoe

+0

@ बिल्डसो क्योंकि कुछ मामलों में, जब आप पृष्ठ मर रहे हैं तो आप सर्वर पर कुछ डेटा भेजना चाहेंगे *। – Lewis

+0

@ बिल्डसो क्योंकि आप घटनाओं को अभी भी ट्रिगर करना चाहते हैं जब स्थान – DanFromGermany

0

क्योंकि if के बाद सब कुछ के साथ-साथ क्रियान्वित किया जाता है, लेकिन ऐसा लगता है कि Chrome और एफएफ के बीच एक अंतर (आईई में परीक्षण नहीं किया) है की तरह है कि।

उदाहरण कोड:

var redirect = 1; 

if (redirect == 1) { 
    console.log("is redirecting"); 
    document.location.assign('https://developer.mozilla.org/'); 
} 

alert('go'); 
document.location.assign('https://www.bing.com/'); 

क्रोम 'गो' में सतर्क कर दिया है, और आप bing.com पर पुनः निर्देशित कर रहे हैं। फ़ायरफ़ॉक्स में, 'जाओ' को सतर्क किया गया है, लेकिन आपको एमडीएन पर रीडायरेक्ट किया गया है।

मुझे लगता है, तो सबसे अच्छा होगा एक else में अन्य सामग्री रैप करने के लिए है।

+1

हां, लेकिन वास्तव में सवाल यह है कि, यह स्क्रिप्ट निष्पादन क्यों जारी रखता है - क्यों न केवल स्क्रिप्ट निष्पादन को रोकें और "तात्कालिक" को रीडायरेक्ट करें? – Bildsoe

1

तो आप प्रॉपर्टी सेट कर रहे हैं, एक विधि बुला नहीं, अंतर महत्वपूर्ण है:

window.location.href = "something"; 

जावास्क्रिप्ट आधारित asyncronous और घटना काम करता है, ब्राउज़र सही जब बदलते खिड़की स्थान की जांच नहीं करता इसका मतलब है कि आप संपत्ति सेट करते हैं, लेकिन बाद में कुछ अप्रत्याशित समय।

कभी-कभी आप बाहर निकलें-ईवेंट के कारण या निकाल दिया जब स्थान परिवर्तन करना चाहते हैं।

जब आप HTTP स्थान हैडर को यह तुलना, व्यवहार में ही है। कभी-कभी आप उदाहरण के लिए PHP स्क्रिप्ट जारी रखना चाहते हैं, भले ही आप स्थान परिवर्तन शीर्षलेख भेज दें।

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