टी एल; डॉ
1- करने के लिए संशोधित वर्तमान URL और सुई जोड़ने / यह (नए संशोधित यूआरएल) इतिहास सूची, उपयोग करने के लिए एक नया URL प्रविष्टि के रूप में pushState:
window.history.pushState({}, document.title, "/" + "my-new-url.html");
2- करने की जगह वर्तमान URL जोड़े बिना इतिहास प्रविष्टियों, उपयोग करने के लिए इसे replaceState:
window.history.replaceState({}, document.title, "/" + "my-new-url.html");
3- आपके व्यावसायिक तर्क के आधार पर , जैसे मामलों में उपयोगी होगा:pushState
आप ब्राउज़र के बैक बटन का समर्थन करना चाहते हैं
आप करना चाहते हैं बनाने के एक नए , यूआरएल जोड़ने / सम्मिलित / धक्का नया URL के इतिहास प्रविष्टियों, और यह वर्तमान URL बनाने
उपयोगकर्ताओं को एक ही मापदंडों के साथ पृष्ठ को बुकमार्क करने की अनुमति देता है (समान सामग्री दिखाने के लिए)
प्रोग्रामर एंकर से तत्कालीन तोते के माध्यम से डेटा तक पहुँचने के लिएstateObj
जैसा कि मैंने आपकी टिप्पणी से समझा, आप अपने URL को फिर से अनुप्रेषित किए बिना साफ़ करना चाहते हैं।
ध्यान दें कि आप पूरे URL को नहीं बदल सकते। आप सिर्फ वही बदल सकते हैं जो डोमेन के नाम के बाद आता है। इसका मतलब यह है कि आप बदल नहीं सकते हैं, www.example.com/लेकिन आप उसके बाद क्या बदल सकते हैं.com/
www.example.com/old-page-name => can become => www.example.com/myNewPaage20180322.php
पृष्ठभूमि
हम प्रयोग कर सकते हैं:
1- यदि आप इतिहास प्रविष्टियों में एक नया संशोधित URL जोड़ना चाहते हैं, तो पुशस्टेट () विधि ।
2- यदि आप वर्तमान इतिहास प्रविष्टि को अद्यतन / बदलना चाहते हैं, तो रिप्लेसस्टेट () विधि ।
.replaceState().pushState()सिवाय इसके कि वास्तव में एक नया बनाने के बजाय .replaceState() वर्तमान इतिहास प्रविष्टि को संशोधित करता है । ध्यान दें कि यह वैश्विक ब्राउज़र इतिहास में एक नई प्रविष्टि के निर्माण को नहीं रोकता है।
.replaceState()विशेष रूप से उपयोगी है जब आप कुछ उपयोगकर्ता कार्रवाई के जवाब में वर्तमान इतिहास प्रविष्टि की राज्य वस्तु या URL को अपडेट करना चाहते हैं ।
कोड
ऐसा करने के लिए मैं इस उदाहरण के लिए pushState () विधि का उपयोग करूंगा जो निम्नलिखित प्रारूप के समान काम करता है:
var myNewURL = "my-new-URL.php";//the new URL
window.history.pushState("object or string", "Title", "/" + myNewURL );
बदलने के लिए स्वतंत्र महसूस pushStateके साथ replaceStateअपनी आवश्यकताओं पर आधारित है।
आप परमार्थक के "object or string"साथ स्थानापन्न कर सकते हैं {}और इसके "Title"साथ document.titleअंतिम संधि बन जाएगी:
window.history.pushState({}, document.title, "/" + myNewURL );
परिणाम
कोड की पिछली दो पंक्तियाँ एक URL बनाएगी जैसे:
https://domain.tld/some/randome/url/which/will/be/deleted/
बनने के लिए:
https://domain.tld/my-new-url.php
कार्य
अब एक अलग दृष्टिकोण की कोशिश करते हैं। कहें कि आपको फ़ाइल का नाम रखने की आवश्यकता है। फ़ाइल नाम अंतिम /और क्वेरी स्ट्रिंग से पहले आता है ?।
http://www.someDomain.com/really/long/address/keepThisLastOne.php?name=john
होगा:
http://www.someDomain.com/keepThisLastOne.php
कुछ इस तरह यह काम कर जाएगा:
//fetch new URL
//refineURL() gives you the freedom to alter the URL string based on your needs.
var myNewURL = refineURL();
//here you pass the new URL extension you want to appear after the domains '/'. Note that the previous identifiers or "query string" will be replaced.
window.history.pushState("object or string", "Title", "/" + myNewURL );
//Helper function to extract the URL between the last '/' and before '?'
//If URL is www.example.com/one/two/file.php?user=55 this function will return 'file.php'
//pseudo code: edit to match your URL settings
function refineURL()
{
//get full URL
var currURL= window.location.href; //get current address
//Get the URL between what's after '/' and befor '?'
//1- get URL after'/'
var afterDomain= currURL.substring(currURL.lastIndexOf('/') + 1);
//2- get the part before '?'
var beforeQueryString= afterDomain.split("?")[0];
return beforeQueryString;
}
अपडेट करें:
एक लाइनर प्रशंसकों के लिए, इसे अपने कंसोल / फायरबग में आज़माएं और यह पेज URL बदल जाएगा:
window.history.pushState("object or string", "Title", "/"+window.location.href.substring(window.location.href.lastIndexOf('/') + 1).split("?")[0]);
यह पृष्ठ URL इससे बदल जाएगा:
http://stackoverflow.com/questions/22753052/remove-url-parameters-without-refreshing-page/22753103#22753103
सेवा
http://stackoverflow.com/22753103#22753103
नोट: जैसा कि सैमुअल एलवाईई ने नीचे टिप्पणी में इंगित किया है, यह सुविधा केवल के लिए पेश की गई है HTML5।
एक वैकल्पिक दृष्टिकोण वास्तव में आपके पृष्ठ को पुनर्निर्देशित करेगा (लेकिन आप क्वेरी स्ट्रिंग खो देंगे `? ', क्या अभी भी इसकी आवश्यकता है या डेटा संसाधित किया गया है?)।
window.location.href = window.location.href.split("?")[0]; //"http://www.newurl.com";