Тут мы выходим на кошерную технологию известную как: человеку - человеческое, роботу - работа. Сделав нормальный интерфейс в стиле олд-скул, то есть с перезагрузкой сайта для открытия запрошенной ссылки, ты дописываешь скрипт, который тупо развешивает листенеры на все нужные ссылки или на их родителя, если они в куче. Например, абстрактно:
var a=document.querySelectorAll('a.type-ajax');
for(var i=0;i<a.length;i++)
a[i].addEventListener('click',
function(e){
e.preventDefault(); /* стопе */
ajax({
url:this.href,
success:function(data){
some_elem.innerHTML=data.html;
}
});
}
);
Но тогда у тебя все ссылки будут загружаться без изменения адреса. Если это николебет, а если колебет, то надо юзать history, который легко заделать под небольшой обхект
var HistoryStates=function(){
var
page={url:location.href,title:D.title},
onpopstate=function(e){
location.assign(e.state.url);
};
this.restore=function(){
D.title=page.title;
history.replaceState(page,page.title,page.url);
},
this.push=function(data){
D.title=data.title;
history.pushState({'url':data.url},data.title,data.url);
};
history.replaceState(page,page.title,page.url);
W.onpopstate=onpopstate;
};
И тогда предыдущая функция станет такой
var hs= new HistoryStates();
var a=document.querySelectorAll('a.type-ajax');
for(var i=0;i<a.length;i++)
a[i].addEventListener('click',
function(e){
e.preventDefault(); /* стопе */
ajax({
url:this.href,
success:function(data){
some_elem.innerHTML=data.html;
/* в data должен быть .title этой страницы */
hs.push(data);
}
});
}
);
Но это еще не все. Откуда взять some_elem если кто-то нажал на пункт выпадающего меню? Его придется создать, то есть просто вставить в body элемент, получить его в переменную some_elem и показать поверх текущего контента в рамочке или сплошняком. А чтобы юзер не давил кнопку Назад желая выбраться из услуг, придется нарисовать кнопку Закрыть, где-то рядом с some_elem и повесить на нее скрытие окна и возврат к начальному адресу:
hs.restore()
Понял как все просто? )))
Фишка тут простая. Контент грузится, адрес менятся, но страница не перезагружается. Но если нажать F5, или кнопку обновить, то все содержание загрузится обычным путем по текущему адресу. То есть и людям и роботам хорошо.