Загрузка страницы с помощью Ajax как ВКонтакте

Не так давно я задался вопросом, как же можно сделать так, чтобы страницы загружались с помощью ajax скрипта, как вконтакте и при этом были проиндексированы поисковыми машинами. 

Данный скрипт я сделал на основе JS фреймворка jQuery (перейти на сайт) и плагина HashChange (перейти на страницу плагина).

Первое, что я сделал это — подключил скрипты на странице и написал функцию которая будет отслеживать изменение хеша страницы:

Подключение скриптов:

Code
<script type="text/javascript" src="/js/jquery.js"></script>
<script type="text/javascript" src="/js/hashchange.js"></script>


Функция:

Code
$jQuery = jQuery.noConflict();
  $jQuery(window).hashchange(function(){
  var link = window.location.hash.replace("#", "");
  get_page_by_hash(link);
  });


Данная функция вызывает функцию «get_page_by_hash» при изменении хэша страницы, первым аргументом которой будет являться ссылка на страницу.

Вторым шагом я сделал саму функцию «get_page_by_hash»:

Code
function get_page_by_hash(link){
  if(typeof(link) != "undefined"){
  if(link != ""){
  $jQuery.ajax({
  type: "POST",
  cache: false,
  async: false,
  url: link,
  success: function(data){
  if(data != ""){
  $jQuery("body").html(data);
  }
  }
  });
  }
  }
  }


В данной функции происходит замена html в тебе body на html, который пришел в ответе на запрос.
1. Метод передачи данных — POST нужен для определения того зашли просто на страницу или это запрос через ajax. Это позволит в шаблоне сделать условие, которое будет скрывать данные не требующие отображения при запросе скриптом:

Code
if($_SERVER["REQUEST_METHOD"] == "GET"){ }


Так же с помощью этого метода можно сделать замену html не в теге а внутри любого элемента, которого можно выбрать с помощью jQuery, при этом обрезать все не нужное в шаблоне с помощью условия, указанного выше.

Следующим шагом было выставление хеша страницы который мы отслеживаем с помощью функции выше:

Code
$jQuery("a").click(function(){
  if($jQuery(this).attr("href").substr(0, 1) == "/"){
  window.location.hash = $jQuery(this).attr("href");
  }
});


Данная функция позволяет добавить hash в адресную строку браузера, работает во всех браузерах.

Так же все видили, что вконтакте в браузерах Mozilla и Chrome адрес меняется без перезагрузки страницы, чтобы этого добиться нужно сделать еще пару шагов:

1. Нужно определить браузер с помощью этой функции:

Code
function getNameBrouser() {
  var userAgent = navigator.userAgent.toLowerCase();
  // Определим Internet Explorer
  if (userAgent.indexOf("msie") != -1 && userAgent.indexOf("opera") == -1 && userAgent.indexOf("webtv") == -1) {
  return "msie";
  }
  // Opera
  if (userAgent.indexOf("opera") != -1) {
  return "opera";
  }
  // Gecko = Mozilla + Firefox + Netscape
  if (userAgent.indexOf("gecko") != -1) {
  return "gecko";
  }
  // Safari, используется в MAC OS
  if (userAgent.indexOf("safari") != -1) {
  return "safari";
  }
  // Konqueror, используется в UNIX-системах
  if (userAgent.indexOf("konqueror") != -1) {
  return "konqueror";
  }
  return "unknown";
}


2. Теперь нам нужно расширить функцию обновления hash страницы:

Code
$jQuery("a").click(function(){
  if($jQuery(this).attr("href").substr(0, 1) == "/"){
  if(getNameBrouser() == "gecko"){
  window.history.pushState("", "", $jQuery(this).attr("href"));  
  window.history.replaceState("", "", $jQuery(this).attr("href"));
  get_page_by_hash($jQuery(this).attr("href"));
  }else{
  window.location.hash = $jQuery(this).attr("href");
  }
  return false;
  }
  });


С помощью данных скриптов у Вас будет сайт похож (по переходам по страницам) на сайт вконтакте.ру

  • FalleN

  • 3461

  • 1

  • 0

Ссылки на статью:

Похожие статьи:

Комментарии:

Аватар пользователя FalleN
FalleN
если внимательно читали статью, то наверняка увидели что в самом верху написано "Подключил скрипты на странице", тобиж на тех страницах где нужен сей эффект. Вроде ничего трудного
Аватар пользователя FalleN
FalleN
это баг, нужно убрать.. Ничего качать не нужно, все скрипты описаны в статье выше!
Аватар пользователя Impulse
Impulse
Объясните попорядку откуда эти файлы взять? куда вписывать то что вы предлагаете.
Аватар пользователя Impulse
Impulse
Че за фигня, у тебя там была кнопка, войди что бы скачать, я зашел и ссылок на файлы нет??? куда пропало??? или это своеобразный прикол??