2013-03-10 9 views
29

stackoverflow.com/#_=_ और window.location.hash पर जाएं #_=_ का मूल्यांकन करता है। ठीक।क्लियरिंग यूआरएल हैश

अब हैश को साफ़ करने के लिए window.location.hash = '' निष्पादित करें, और यूआरएल stackoverflow.com/# बन जाता है। (पिछला # पर ध्यान दें।)

#window.location.hash में असंगत रूप से शामिल या बहिष्कृत क्यों है? पृष्ठ को पुनः लोड किए बिना URL से # हटाया जा सकता है?

(MDN कहते

यूआरएल जिसमें # प्रतीक सहित # प्रतीक है, इस प्रकार का हिस्सा [हैश है]।

लेकिन यह है कि के मामले में सही नहीं है एक खाली हैश)

+0

आपने किस व्यवहार के साथ इस व्यवहार को देखा? – Gumbo

+0

'stackoverflow.com/#' पर जाकर 'window.location.hash ===' '' के परिणामस्वरूप भी यह लगातार व्यवहार है। –

+0

आप कह रहे हैं कि जावास्क्रिप्ट के साथ 'हैश' में हेरफेर करना यूआरएल में '#' और खाली 'हैश' संपत्ति की ओर जाता है। अब URL में केवल '#' वाले पृष्ठ पर जाने से भी 'हैश' संपत्ति खाली हो जाती है। 'हैश' संपत्ति केवल तब भर जाती है जब URL में' # 'के बाद अन्य वर्ण होते हैं और यह सभी ब्राउज़रों में लगातार व्यवहार होता है। –

उत्तर

53

दूसरा सवाल (बिना एक पृष्ठ ताज़ा # को हटाने) उत्तर देने के लिए:

history.pushState('', document.title, window.location.pathname); 
+3

नोट: पुशस्टेट आईई 10 और ऊपर है। –

+4

मैं इसे प्राप्त करने के लिए 'replaceState' पसंद करता हूं। – Banago

+2

क्या आईई 9 के लिए कोई समाधान है? मैंने 'window.location.href.replace (/#.*/," ") की कोशिश की; 'लेकिन यह पृष्ठ को फिर से लोड करता है। –

0

इस व्यवहार ड्राइविंग 2 बातें कर रहे हैं:।

  • "हैश प्रॉपर्टी को नामांकित एंकर पर दस्तावेज़ को फिर से लोड किए बिना नेविगेट करना।" (here)
  • "जब आप हैश को छोड़कर स्थान वस्तु या उसके किसी भी गुण को सेट करते हैं [...] जावास्क्रिप्ट 1.1 में और बाद में, स्थान सेटिंग का प्रभाव किसी दस्तावेज़ को मूल पर तुलना करने के लिए उपयोगकर्ता की सेटिंग पर निर्भर करता है नेटवर्क।" (here)

तो बुनियादी तौर पर, हैश संपत्ति की स्थापना एक बार पुनः लोड करने के लिए नेतृत्व कभी नहीं करना चाहिए, किसी भी अन्य संपत्ति की स्थापना (एक बार पुनः लोड करने के लिए नेतृत्व चाहिए या शायद एक ई-टैग/संशोधित-के बाद से शीर्ष लेख की जांच, ब्राउज़र सेटिंग के आधार)।

मुझे लगता है कि स्थिरता के लिए, ब्राउज़र बिल्डर्स हैश के रूप में '#' सेट करने के लिए, एक खाली हैश सेट करने में परिवर्तन करते हैं। इस तरह स्थान पट्टी में यूआरएल एक रीलोड का कारण नहीं है। लेकिन यह बाद का हिस्सा शुद्ध अटकलें है।

4

अपने पहले प्रश्न के उत्तर देना: "का हिस्सा:

Mozilla.org में window.location doc के अनुसार यूआरएल # प्रतीक का पालन करता है, यदि # प्रतीक है, जिसमें 0 प्रतीक शामिल है। यूआरएल में # या "

के बाद कुछ भी नहीं है तो खाली स्ट्रिंग

उत्सुकता से, वह दस्तावेज़ 4/8/2013 को अपडेट किया गया था। सुनिश्चित नहीं है कि दस्तावेज़ों की जांच करने के बाद इसे जोड़ा गया था या नहीं।

वैसे (और उत्तरों के संदर्भ में), window.location.hash और pushState अलग-अलग अवधारणाएं हैं, हालांकि निकट से संबंधित हैं।

-1

मैं दो सप्ताह पहले एक ही मुद्दे से निपट रहा हूं और मेरा निष्कर्ष यह था कि कोई अच्छा समाधान नहीं था। यूआरएल से हैश को हटाने के लिए कोई सीधा समाधान नहीं है, हमेशा ब्राउजर को पृष्ठ को फिर से लोड करने के लिए मजबूर किया जाता है, और यहां तक ​​कि अगर एक अनोखा हैक-जैसे समाधान था, तो मुझे अस्पष्ट समाधानों का उपयोग करने के बजाय यूआरएल के अंत में हैश होगा।

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