Sayfayı yeniden yüklemeden geçerli sayfanın URL’sini değiştirmenin bir yolu var mı? Mümkünse #’dan önceki bölüme erişmek istiyorum. Ya da başka bir deyişle yalnızca domainden sonraki bölümü değiştirmek istiyorum.
Örneğin Facebook’ta veya bir haber sitesinde bir fotoğrafı açtığınızda Facebook’un yaptığı şey budur. URL çubuğu doğrudan bu fotoğrafı işaret etmek için değişir, böylece URL’yi sitenin neresinde olduğunuzu kaybetmeden paylaşabilirsiniz.
İlk akla gelen çözüm window.location
kullanmak. Ama bu çözüm sayfayı yeniler.
window.location.href = "www.mysite.com/page2.php";
// bu çözüm sayfayı yeniler.
Ancak, history.pushState
ile yapabiliriz bunu. Örnek:
document.getElementById("content").innerHTML = response.html;
document.title = response.pageTitle;
window.history.pushState({"html":response.html,"pageTitle":response.pageTitle},"", urlPath);
Daha sonra geri/ileri düğmesini algılamak için ise window.onpopstate
kullanabiliriz:
window.onpopstate = function(e){
if(e.state){
document.getElementById("content").innerHTML = e.state.html;
document.title = e.state.pageTitle;
}
};
Tarayıcı geçmişini manipüle etmeye daha ayrıntılı bir bakış için, bu MDN makalesine bakabilirsiniz.
URL’yi değiştirmek ancak girdiyi tarayıcı geçmişine eklemek istemiyorsanız HTML5 replaceState’i de kullanabilirsiniz:
if (window.history.replaceState) {
window.history.replaceState(statedata, title, url);
}
Bu yöntem geri düğme işlevselliğini ‘bozar’. Bu durum bazen (her görüntüde geri dönmek yerine galeri dizini sayfasına geri dönmesini istediğiniz gibi bir durumda) kullanışlı olabilir.