दिलचस्प पोस्ट
jqgrid गतिशील कॉलम और डेटा JSON द्वारा मैं किसी उपयोगकर्ता द्वारा ऐप्प रनों के बीच आईफोन घड़ी की प्रगति कैसे खोज सकता हूं? मैं कैसे जांच सकता हूं कि एक दो-आयामी NumPy सरणी में इसके अंदर मानों का एक विशिष्ट पैटर्न है? क्यूमेक – आउटपुट में एक फाइल कॉपी कैसे करें मैं एंड्रॉइड एप्लिकेशन के सभी बटनों में एक शैली को कैसे लागू करूं? आईओएस 7+ में बेस64 डिकोडिंग जब आपका ऐप खुला होता है और अग्रभूमि में स्टॉक आईओएस अधिसूचना बैनर प्रदर्शित करता है? एंड्रॉइड डेटाबेस मौजूद होने पर प्रश्न! मूल्य के बजाय कॉन्फ्रेंस संदर्भ से क्यों पास करें? सी ++ में 128-बिट संख्या का प्रतिनिधित्व करना मैं Greasemonkey स्क्रिप्ट से XMLHttpRequests कैसे रोक सकता हूं? कैसे एक AngularJS निर्देश में परिभाषित विधि कॉल करने के लिए? मेरा बटन पाठ लॉलीपॉप पर सभी कैप्स के लिए क्यों मजबूर है? एक म्यूटक्स क्या है? AngularJs के साथ jQuery के UI Datepicker

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

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

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

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

वेब के समाधान से एकत्रित समाधान "घटना जब 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); };