80

में यूआरएल एंकर परिवर्तन घटना को संभालें मैं जावास्क्रिप्ट कॉलबैक कोड कैसे लिख सकता हूं जो यूआरएल एंकर में किसी भी बदलाव पर निष्पादित किया जाएगा?जेएस

उदाहरण के लिए http://example.com#a से http://example.com#b

उत्तर

117

गूगल कस्टम खोज इंजन किसी पिछले मान के खिलाफ हैश जाँच करने के लिए, जबकि एक अलग डोमेन पर बच्चे iframe अद्यतन करता आइफ्रेम दस्तावेज़ के शरीर के आकार को रोकने के लिए माता पिता के स्थान हैश एक टाइमर का उपयोग करें। जब टाइमर परिवर्तन को पकड़ता है, तो माता-पिता शरीर के मिलान से आईफ्रेम का आकार बदल सकते हैं ताकि स्क्रॉलबार प्रदर्शित न हों।

कुछ निम्नलिखित की तरह एक ही प्राप्त होता है:

var storedHash = window.location.hash; 
window.setInterval(function() { 
    if (window.location.hash != storedHash) { 
     storedHash = window.location.hash; 
     hashChanged(storedHash); 
    } 
}, 100); // Google uses 100ms intervals I think, might be lower 

गूगल क्रोम 5, सफारी 5, Opera 10.60, Firefox 3.6 और Internet Explorer 8सभीhashchange घटना का समर्थन:

if ("onhashchange" in window) // does the browser support the hashchange event? 
    window.onhashchange = function() { 
     hashChanged(window.location.hash); 
    } 

और उसे एक साथ रखते :

if ("onhashchange" in window) { // event supported? 
    window.onhashchange = function() { 
     hashChanged(window.location.hash); 
    } 
} 
else { // event not supported: 
    var storedHash = window.location.hash; 
    window.setInterval(function() { 
     if (window.location.hash != storedHash) { 
      storedHash = window.location.hash; 
      hashChanged(storedHash); 
     } 
    }, 100); 
} 

jQuery में एक प्लगइन भी है जो हैशचेंज ईवेंट की जांच करेगा और यदि आवश्यक हो तो अपना खुद का प्रदान करेगा - http://benalman.com/projects/jquery-hashchange-plugin/

संपादित करें: अद्यतन ब्राउज़र समर्थन (दोबारा)।

+0

, 'var storeHash = window.location.hash;' डालने-एक-साथ सारांश ब्लॉक में जोड़ें। बीटीडब्ल्यू: आजकल मुझे लगता है कि पॉलीफिल कहा जाता है। –

+1

आजकल आप 'विंडो' पर 'हैश चेंज' को सुन सकते हैं http://stackoverflow.com/questions/6390341/how-to-detect-url-change –

+2

@Timo: आपने ... मेरा जवाब नहीं पढ़ा, क्या तुमने किया? :-P –

2

मैं क्या अन्य अतः सवालों में देख से, केवल व्यावहारिक पार ब्राउज़र समाधान एक टाइमर है। उदाहरण के लिए this question देखें।

-1

आप इस

Mutation event types

उत्परिवर्तन घटना मॉड्यूल डिज़ाइन किया गया है एक दस्तावेज़ की संरचना, में कोई परिवर्तन attr और पाठ संशोधन को शामिल करने की अनुमति देने के लिए अधिसूचना से अधिक जानकारी प्राप्त कर सकते हैं।

+0

इस बारे में है के रूप में करता है डोम बदलता है। पूर्णता के लिए – rsman

3

setInterval() अब के लिए केवल सार्वभौमिक समाधान है। लेकिन वहाँ hashchange event

+0

एफवाईआई: 'ऑनशैशचेंज' घटना [मोज़िला डेवलपर नेटवर्क पर प्रलेखन] (https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onhashchange) –

1

के रूप में भविष्य में कुछ प्रकाश कर रहे हैं (बस रिकार्ड के लिए।) YUI3 "hashchange" सिंथेटिक घटना कम या ज्यादा एक ही बात को स्वीकार कर लिया जवाब

YUI().use('history-hash', function (Y) { 
    Y.on('hashchange', function (e) { 
    // Handle hashchange events on the current window. 
    }, Y.config.win); 
});