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 }
Skomentuj wpis