Я реализую веб-сайт, который динамически устанавливает свои URL-адреса с помощью History.js, когда новые разделы загружаются на главную страницу через ajax.
Кажется, это работает хорошо, но есть проблема с разделом хэша в URL-адресе, который History.js создает в качестве запасного варианта в Internet Explorer.
Вот примеры ссылок на странице, созданные с помощью jquery:
function connect_browse_buttons(){
$('.browselink').each(function(){
$(this).click(function(){
var action = $(this).attr('name');
action = action.substring( ('action_browse').length );
browsetype = action;
if (isIE){
// remove data object and title to avoid use of SUIDs by History.js in IE
History.pushState(null, null, '/public/' + action);
} else {
History.pushState({oldurl: History.getState()['url']}, "Example " + action, config.wwwroot + "public/" + action);
}
return false;
});
});
}
Файл.htaccess перенаправляет любые URL-адреса, такие какhttp://example.com/public/category_aдоhttp://example.com,где javascript анализирует URL-адрес и загружает соответствующий раздел через запросы ajax в обработчике changeState.
JavaScript проверяет URL-адреса, такие как
http://example.com/public/category_a
И для эквивалентных резервных URL-адресов, созданных в Internet Explorer, например
http://example.com/#public/category_a
Все работает нормально -Итак:
В Firefox , если я открою сайт в корне сайта,http://example.com, и щелкните ссылку, как указано выше, содержимое загружается (в обработчик changeState ), а URL-адрес устанавливается History.pushState как:
http://example.com/public/category_a
Если я затем нажму на другую ссылку, URL-адрес будет установлен, например,:
http://example.com/public/category_b
В IE , если я открою сайт в корне сайта и нажму на ссылку, как указано выше, контент загрузится, а URL-адрес будет установлен с хэшем как:
http://example.com/#public/category_a
Если я затем нажму на следующую ссылку, URL-адрес будет установлен как:
http://example.com/#public/category_b
Проблема возникает , когда я открываю в IE страницу, которая была добавлена в закладки в Firefox и не имеет хеша в URL-адресе. Возьмем наш обычный пример:
http://example.com/public/category_a
Если я открою этот URL-адрес непосредственно в IE, через закладку или вставив URL-адрес в адресную строку браузера,.htaccess успешно перенаправляется, URL-адрес анализируется файлом js и загружается содержимое. Однако теперь, если я нажму на ссылку категории _b, URL-адрес будет установлен History.pushState на:
http://example.com/public/category_a#./category_b
Что я действительно хотел, так это установить URL как:
http://example.com/#public/category_b
Однако History.js, кажется, берет весь предыдущий URL-адрес в качестве базового URL-адреса для последующих pushStates. Я попытался установить абсолютные URL-адреса в History.pushState, но безуспешно. Как вы можете видеть в приведенном выше блоке кода, у меня есть специальный оператор pushState для IE -. Я пытался настроить это разными способами. Как я могу заставить историю pushState распознавать:
http://example.com
в качестве базовой части URL-адреса, к которому должен быть добавлен хеш-раздел? Или есть лучший способ приблизиться к этому, чем тот, который я описал выше?