दिलचस्प पोस्ट
120 मिलियन रिकॉर्ड अपडेट करने का सबसे तेज़ तरीका क्यों बोर्ग पैटर्न पायथन में सिंगलटन पैटर्न से बेहतर है एक जार फ़ाइल से निर्देशिका की प्रतिलिपि बनाएँ गतिशील RequireJS में आवश्यक है, "मॉड्यूल नाम अभी तक संदर्भ के लिए लोड नहीं किया गया है" त्रुटि? बंद वर्कबुक से मूल्य प्राप्त करने के लिए ExecuteExcel4Macro एकाधिक क्वेरीज़ (PDO_MYSQL, PDO_MYSQLND) के लिए पीडीओ समर्थन फ़ायरफ़ॉक्स के लिए जावास्क्रिप्ट मेमोरी प्रोफाइलर क्यों करता है ++ ] ] + ] स्ट्रिंग "10" वापस आती है? क्या जावा के लिए एक डिस्ट्रक्टर है? वेबब्रेसर नियंत्रण और जावास्क्रिप्ट त्रुटियाँ SQL सर्वर एकाधिक पंक्तियों में CSV को विभाजित करता है क्या मैं लूप के लिए आरंभीकरण में विभिन्न प्रकार के चर को घोषित कर सकता हूं? sed -i + SOLARIS में एक ही विकल्प क्या है कोई एक्जीक्यूटेबल मेलिंग कमांड "dotnet-ef" नहीं मिला मेवेन रिपॉजिटरी से स्रोत जेआरएस प्राप्त करें

घटना जब window.location.href में परिवर्तन

मैं उस साइट के लिए एक ग्रेज़म्की स्क्रिप्ट लिख रहा हूं जो कुछ बिंदु पर location.href को संशोधित करता है।

पृष्ठ पर window.location.href परिवर्तन करते समय मैं कैसे एक घटना ( window.addEventListener या कुछ इसी तरह के माध्यम से) प्राप्त कर सकता हूं? मुझे नए / संशोधित यूआरएल की ओर इशारा करते दस्तावेज़ के DOM तक पहुंच की भी आवश्यकता है I

मैंने अन्य समाधान देखे हैं, जिसमें समय-सीमा और मतदान शामिल हैं, लेकिन मैं इसे से बचने के लिए यदि संभव हो तो चाहता हूं।

Solutions Collecting From Web of "घटना जब window.location.href में परिवर्तन"

पॉपस्टेट इवेंट :

पॉपस्टेट इवेंट को निकाल दिया जाता है जब सक्रिय इतिहास प्रविष्टि में परिवर्तन होता है। […] पॉपस्टेट इवेंट केवल ब्राउज़र ऐक्शन जैसे कि वापस बटन पर क्लिक करके या जावास्क्रिप्ट में history.back () को कॉल करके ट्रिगर किया जाता है)

इसलिए, popstate घटना को सुनना और history.pushState() का उपयोग करते समय एक popstate घटना भेजने के लिए href परिवर्तन पर कार्रवाई करने के लिए पर्याप्त होना चाहिए:

 window.addEventListener('popstate', listener); const pushUrl = (href) => { history.pushState({}, '', href); window.dispatchEvent(new Event('popstate')); }; 

आप मतदान से बचना नहीं कर सकते हैं, href परिवर्तन के लिए कोई भी घटना नहीं है।

अंतराल का उपयोग काफी तेज है अगर आप पानी में नहीं जाते हैं। प्रत्येक 50 एमआर href जांचते हुए या यदि आप इस बारे में चिंतित हैं तो प्रदर्शन पर कोई महत्वपूर्ण प्रभाव नहीं होगा

क्या आपने पहले प्रयास किया है? पृष्ठ नेविगेशन अनुरोध का जवाब देने से पहले यह ईवेंट तुरंत आग लगाता है, और इसमें href के संशोधन को शामिल करना चाहिए।

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE></TITLE> <META NAME="Generator" CONTENT="TextPad 4.6"> <META NAME="Author" CONTENT="?"> <META NAME="Keywords" CONTENT="?"> <META NAME="Description" CONTENT="?"> </HEAD> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function(){ $(window).unload( function(event) { alert("navigating"); } ); $("#theButton").click( function(event){ alert("Starting navigation"); window.location.href = "http://www.bbc.co.uk"; } ); }); </script> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#800000" ALINK="#FF00FF" BACKGROUND="?"> <button id="theButton">Click to navigate</button> <a href="http://www.google.co.uk"> Google</a> </BODY> </HTML> 

सावधान रहें, हालांकि, जब भी आप पृष्ठ से दूर जाते हैं, चाहे स्क्रिप्ट के कारण हो, या किसी लिंक पर क्लिक करने पर आपका ईवेंट आग जाएगा। आपकी असली चुनौती, घटनाओं के लिए अलग कारणों का पता लगा रहा है। (यदि यह आपके तर्क के लिए महत्वपूर्ण है)

एक डिफ़ॉल्ट onhashchange ईवेंट है जिसका उपयोग आप कर सकते हैं।

यहां प्रलेखित

और इस तरह से इस्तेमाल किया जा सकता है:

 function locationHashChanged( e ) { console.log( location.hash ); console.log( e.oldURL, e.newURL ); if ( location.hash === "#pageX" ) { pageX(); } } window.onhashchange = locationHashChanged; 

अगर ब्राउज़र oldURL और newURL समर्थन नहीं करता है तो आप इसे इस तरह से बाँध सकते हैं:

 //let this snippet run before your hashChange event binding code if( !window.HashChangeEvent )( function() { let lastURL = document.URL; window.addEventListener( "hashchange", function( event ) { Object.defineProperty( event, "oldURL", { enumerable: true, configurable: true, value: lastURL } ); Object.defineProperty( event, "newURL", { enumerable: true, configurable: true, value: document.URL } ); lastURL = document.URL; } ); } () ); 

मैं इस स्क्रिप्ट को अपने विस्तार में "किसी भी मीडिया को पकड़ो" और ठीक काम करता हूं ( जैसे यूट्यूब मामले )

 var oldHref = document.location.href; window.onload = function() { var bodyList = document.querySelector("body") ,observer = new MutationObserver(function(mutations) { mutations.forEach(function(mutation) { if (oldHref != document.location.href) { oldHref = document.location.href; /* Changed ! your code here */ } }); }); var config = { childList: true, subtree: true }; observer.observe(bodyList, config); };