JavaScript: onLocationChange – plugin do jQuery

Potrzebowałem jakiś czas temu skryptu wykonującego się w sytuacji gdy zostanie zmieniony adres URL strony. Dotyczyło to dodania do adresu ciągu #costam/cos/innego. Ciąg taki dodawałem do adresu np w sytuacji gdy wczytywałem dynamicznie komentarze do jakiegoś elementu. Element wczytywał się na początku, a niżej były komentarze ładowanie ajaxowo z paginacją, no i każde przejście na koleją podstronę komentarzy dodawało do adresu #!comments/(nr-strony). O ile samo wczytywanie nie było problemem to zamarzyło mi się, że mając adres z http://xlteam.pl/element.html#!comments/2 wczytało odrazu drugą stronę komentarzy. Dlatego też pogooglałem i znalazłem rozwiązanie, które opakowałem w plugin jQuery i działa :) Oto cały kod pluginu:

(function($){
  $.onLocationChange = function(func, time) {
    if(!time) time = 500;
    var currLoc = '';
    setInterval(function()
    {
        if(window.location.href != currLoc)
        {
            currLoc = window.location.href;
            func(); //execute function
        }
 
    }, time);
 
  };
})(jQuery);

przykład jak tego używać w dalszej części wpisuPrzykład użycia:

$(function() {
    $.onLocationChange(loadComments);
    //it's possible to change default change-detection-time, for example to 2 seconds:
    $.onLocationChange(loadComments, 2000);
});
function loadComments() {
 
    var data = {};
    var url = location.href;
    //searching in URL decimals which are page number and save it to data.p
    if(url.indexOf('#!')>0 || url.indexOf('#%21')>0) {
        var m = url.substr(url.indexOf('#!')>-1?url.indexOf('#!'):url.indexOf('#%21')+4).match(/([0-9]+)/g);
        data.p = parseInt(m[0]);
    }
$.post('...', data); //loading comments
}