Как поменять url в ie
Приветствую !
Посоветуйте скрипт, который меняет URL в адресной строке в HTML4 браузерах в частности IE8 и конечно без перезагрузки страницы history.js не подходит по двум причинам: глючит и добавляет #. Необходимо чтобы url менялся без добавления #, как на facebook ,youtube и тп Заранее благодарен. |
Цитата:
Цитата:
Цитата:
А для новых браузеров используйте History-API |
Цитата:
то при попытке заменить ?ie=md на ?ie=md1 получаешь ?ie=md#?ie=md1 по такому линку юзер ничегог не откроет www.xxx.ru?ie=md#?ie=md1 правда что ли? они нашли способ как менять юрл в древних браузерах? Цитата:
а зачем верить, нужно проверить зайдите в ie на них |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Цитата:
когда iE запретят? |
Цитата:
Цитата:
|
Цитата:
|
Цитата:
Библиотека которая написана мною. Имеет некоторые возможности для реализации ссылок хотя бы вида: http://example.com/#?ie=md1, вместо http://example.com/?ie=md#?ie=md1 Для этого вам придется подшаманить на сервере с настройками HTTP-сервера. И на клиенте либо передать аргумент redirect=true или вызвать метод history.redirect(); К сожалению сайт на котором я демонстрировал это, на данный момент не работает. Там можно было посмотреть реализацию. |
примерно так положить это в index.php:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="history.js?redirect=true"></script>
<script type="text/javascript">
// метод загружает данные и куда то их рассовывает
function loadContent(url, callback) {
// вызвать аякс
alert('Нужно загрузить контент по ссылке: ' + url);
// вызвать callback после удачной загрузки контента
callback && callback();
}
(function(eventInfo) {
// вешаем события на все ссылки в нашем документе
document[eventInfo[0]](eventInfo[1] + 'click', function(event) {
event = event || window.event;
var target = event.target || event.srcElement;
// ищем все ссылки с классом 'ajax'
if (target && target.nodeName === 'A' &&
(' ' + target.className + ' ').indexOf('ajax') >= 0)
{
// тут можете вызвать подгрузку данных и т.п.
loadContent(target.href, function() {
// заносим ссылку в историю
history.pushState(null, null, target.href);
});
// не даем выполнить действие по умолчанию
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
}
}, false);
// вешаем событие на popstate которое срабатывает при нажатии back/forward в браузере
window[eventInfo[0]](eventInfo[1] + 'popstate', function(event) {
// получаем нормальный объект Location
/*
* заметьте, это единственная разница при работе с данной библиотекой,
* так как объект document.location нельзя перезагрузить, поэтому
* библиотека history возвращает сформированный "location" объект внутри
* объекта window.history, поэтому получаем его из "history.location".
* Для браузеров поддерживающих "history.pushState" получаем
* сформированный объект "location" с обычного "document.location".
*/
var returnLocation = history.location || document.location;
// тут можете вызвать подгрузку данных и т.п.
loadContent(returnLocation.href)
}, false);
})(window.addEventListener ? ['addEventListener', ''] : ['attachEvent', 'on']);
</script>
</head>
<body>
<a class="ajax" href="?ie=md1">Md1</a>
<a class="ajax" href="?ie=md2">Md2</a>
</body>
</html>
а на сервере если используете apache, в .htaccess нужно написать такие строки:
# Наш сайт будет работать с кодировкой UTF-8 тем самым серверу мы укажем о том что бы он самостоятельно
# добавлял в заголовок Content-Type подстроку charset=utf-8 в тех случаях когда ее нет
AddDefaultCharset UTF-8
# Укажем серверу информацию о том какой файл является по умолчанию для ссылки вида http://somesite.com/
DirectoryIndex index.php
# Включаем модуль преобразований ссылок
RewriteEngine On
# Условие если в ссылке нет прямого доступа к файлу
RewriteCond %{REQUEST_FILENAME} !-f
# то передаем управление основному обработчику, в нашем случае это index.php
RewriteRule ^(.*) index.php [QSA,L]
|
все-таки думаю красивее будет сделать так:
js выдергиваем все что после # , далее передаем через ajax в php, далее в php выдергиваем нужные парметры и возвращаем назад в js. да, будет двойной раундтрип , но зато будет наплевать на присутствие # в url и url будет рабочим |
Цитата:
|
проще сделал....мне в php и не нужно передавать содержимое hash , просто добавил вторую проверку в js : если при самой первой загрузке из php приходит пустой параметр , тогда идет проверка на наличие hash,
и если hash есть , тогда параметры извлекаем из него причем если добавить проверку браузера, то можно убрать и history.js и в html4 браузерах сразу менять значение hash |
Цитата:
|
короче добавил проверку браузера, отключил history , теперь ссылки кроссбраузенно открываются независимо от наличия hash в url
|
| Часовой пояс GMT +3, время: 15:34. |