मेरे आवेदन में, यूआरएल में कुछ जानकारी छिपाने के लिए मैं नीचे दिए गए कोड का उपयोग कर रहा हूं

history.replaceState ({}, "", "bar.html");

यह सभी ब्राउज़रों में काम कर रहा है फ़ायरफ़ॉक्स नवीनतम संस्करण (v56+) को छोड़कर

फ़ायरफ़ॉक्स में, अगर मैं F5 दबाता हूं तो यह पिछले यूआरएल पर वापस जा रहा है जिसे मैंने पहले ही उपरोक्त कोड से बदल दिया है।

किसी भी तरह की सहायता की हम सराहना करेंगे।

6
Jayesh Dhandha 2 मई 2018, 13:27

1 उत्तर

सबसे बढ़िया उत्तर

Bugzilla पर एक खुला मुद्दा है।

वीडियो उदाहरण 1 और वीडियो उदाहरण 2 बग को पुन: उत्पन्न करने का तरीका बताएं।

शर्तें:

  1. केवल मोज़िला फ़ायरफ़ॉक्स संस्करण 56+
  2. सिंगल पेज एप्लीकेशन
  3. रूटिंग उपयोगों के लिए history.replaceState, सभी पैरामीटर शून्य नहीं हैं

चरण:

  1. लॉग इन करें और मुख्य पृष्ठ आधार पर रीडायरेक्ट करें URL
  2. किसी भी एप्लिकेशन टैब पर नेविगेट करें और URL पैरामीटर बदलें
  3. F5, cmd + r दबाएं या Refresh बटन पर क्लिक करें
  4. अप!... फिर से मुख्य पृष्ठ को आधार URL के साथ खोलें (लेकिन अन्य ब्राउज़रों में हम चयनित टैब और सही URL देखते हैं)

Url से क्वेरी स्ट्रिंग्स निकालते समय समान व्यवहार का अनुभव होता है।

यह निम्नलिखित व्यवहार के कारण हो सकता है (मैं वादिम गोंचारोव को उद्धृत करता हूं)

मुख्य समस्या यह है कि history.replaceState का उपयोग करने और फिर cmd+r/f5 पर क्लिक करने के बाद हम देखेंगे कि ब्राउज़र बदला हुआ (सही) url सर्वर पर भेजता है, लेकिन दिखाता है location.search और ब्राउज़र url बार दोनों में गलत url। और यह व्यवहार तब तक जारी रहता है (यदि "cmd+r/f5" पर क्लिक करें) जब तक हम ब्राउज़र url बार पर "एंटर" पर क्लिक नहीं करते।

पहला समाधान फेलिक्स ली से पोस्ट किया गया

history.replaceState को कॉल करने से पहले, करें location.hash = location.hash;

hash को स्वयं पर सेट करने से कोई प्रभाव नहीं पड़ता, लेकिन बग दूर हो जाता है

यह समाधान आदर्श नहीं है और mtomalley एक दूसरा समाधान जोड़ता है

ब्राउज़र लोकेशन बार में दिखाए गए URL से भिन्न URL का अनुरोध कर रहा है...

इसके अतिरिक्त, समाधान आदर्श नहीं है क्योंकि यदि URL में पहले से कोई hash नहीं है, तो location.hash = location.hash एक जोड़ता है, popstate पर कॉल करता है, और एक इतिहास जोड़ता है प्रविष्टि.

एक वैकल्पिक समाधान जो बहुत कम सरल है:

  1. क्लाइंट पर अनुरोध URI को उजागर करने के लिए अपनी बैकएंड तकनीक के लिए उपलब्ध किसी भी साधन का उपयोग करें
  2. पेज लोड होने पर (किसी भी क्लाइंट रूटिंग कोड से पहले), URI को window.location के सामने चेक करें
  3. यदि वे भिन्न हैं, तो इसे ठीक करने के लिए replaceState का उपयोग करें।

स्थान संक्षेप में किसी भी पुनः लोड पर गलत URL दिखाएगा, लेकिन कम से कम इसे ठीक कर दिया जाएगा और रूटिंग अपेक्षा के अनुरूप काम कर सकती है...

तीसरा समाधान Mathis Wiehl से प्रस्तावित है

window.addEventListener('unload', function(event) { location.replace(location) });

इस तरह जेएस स्थान की स्थिति रीफ्रेश और टैब बंद होने के मामलों में एफएफ स्थान पर फिसल जाती है (जिस तरह से +⇧+t के साथ फिर से खोलने पर एक ही समस्या होती है)।

मैथिस के उपरोक्त समाधान में निम्न समस्या है (मैं jimmyhmiller)

Next.js ने ऊपर बताए गए मैथिस के समाधान का उपयोग करने की कोशिश की और इससे उनके लिए कुछ खराब समस्याएं हुईं। यहां विवरण: https://github.com/zeit/next.js/pull/6896< /ए>

उपरोक्त समाधान के साथ एक नया बग अनुभव किया गया था, जिसे में समझाया गया है #6882

क्वेरी पैरामीटर वाले किसी पृष्ठ पर उतरते समय, ब्राउज़र उस पृष्ठ पर "लॉक" हो जाता है और प्रोग्रामेटिक रूप से या मैन्युअल रूप से किसी भिन्न समान-डोमेन पृष्ठ पर नेविगेट करके मूल पर वापस रीडायरेक्ट करता है। ध्यान दें कि यह तब तक शुरू नहीं होता जब तक यूआरएल में एक क्वेरी पैरामीटर शामिल नहीं होता, पूरी तरह से विचित्र

मैं इतिहास.replaceState के साथ अन्य मोज़िला संबंधित मुद्दों की एक सूची भी शामिल करता हूं।

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

5
Fabrizio Bertoglio 30 अप्रैल 2019, 22:36