Просмотр полной версии : Как поменять url в ie
Приветствую !
Посоветуйте скрипт, который меняет URL в адресной строке в HTML4 браузерах в частности IE8 и конечно без перезагрузки страницы
history.js не подходит по двум причинам: глючит и добавляет #.
Необходимо чтобы url менялся без добавления #, как на facebook ,youtube и тп
Заранее благодарен.
history.js не подходит по двум причинам: глючит и добавляет #.
и в чем заключается глючисть? а от решетки в HTML4 браузерах, никуда не денетесь.
Необходимо чтобы url менялся без добавления #
для HTML4 браузеров это не возможно!
как на facebook ,youtube и тп
правда что ли? они нашли способ как менять юрл в древних браузерах? Не поверю, вы скорее всего просто что-то путаете.
А для новых браузеров используйте History-API
и в чем заключается глючисть? а от решетки в HTML4 браузерах, никуда не денетесь.
если приходит линк например с www.xxx.ru?ie=md
то при попытке заменить ?ie=md на ?ie=md1
получаешь ?ie=md#?ie=md1
по такому линку юзер ничегог не откроет
www.xxx.ru?ie=md#?ie=md1
правда что ли? они нашли способ как менять юрл в древних браузерах?
Не поверю, вы скорее всего просто что-то путаете.
а зачем верить, нужно проверить зайдите в ie на них
то при попытке заменить ?ie=md на ?ie=md1
получаешь ?ie=md#?ie=md1
это не глючисть а фича, так как удаление из ЮРЛа что либо до решетки, приведет в HTML4 браузерах к перезагрузке страницы. Поэтому что бы страница не перезагружалась, основной ЮРЛ не модифицируется.
а зачем верить, нужно проверить зайдите в ie на них
Зашел из ИЕ9, вижу страницы перезагружаются во всю. Внимательнее смотрите, просто ИЕ иногда так быстро загружает страницы что кажется что вовсе и не было перезагружено ничего. А в реальности все перезагружается.
danik.js
24.10.2013, 14:33
Необходимо чтобы url менялся без добавления #, как на facebook ,youtube и тп
Есть категория людей, которая считает что такие крутые сайты умеют творить магию и обладают особой силой. А простые сайты об этом как бы не догадываются и не используют ничего подобного.
это не глючисть а фича, так как удаление из ЮРЛа что либо до решетки, приведет в HTML4 браузерах к перезагрузке страницы. Поэтому что бы страница не перезагружалась, основной ЮРЛ не модифицируется.
согласен ,что фича..придется с ней смириться..
Зашел из ИЕ9, вижу страницы перезагружаются во всю. Внимательнее смотрите, просто ИЕ иногда так быстро загружает страницы что кажется что вовсе и не было перезагружено ничего. А в реальности все перезагружается.
да, действительно....возможно не заметил ОООчень быструю перезагрузку
когда iE запретят?
придется с ней смириться..
есть обходные пути, но придется под них реализовывать свой сайт.
когда iE запретят?
когда умрет интернет наверное))))
есть обходные пути, но придется под них реализовывать свой сайт.
какие пути имеете ввиду?
какие пути имеете ввиду?
как убрать часть до решетки: ?ie=md. Но решетку в любом случае не уберете.
Библиотека (https://github.com/devote/HTML5-History-API) которая написана мною. Имеет некоторые возможности для реализации ссылок хотя бы вида: 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 будет рабочим
но зато будет наплевать на присутствие # в url и url будет рабочим
я вам дал рабочий вариант, внутри JS у вас будет хороший URL без решетки
проще сделал....мне в php и не нужно передавать содержимое hash , просто добавил вторую проверку в js : если при самой первой загрузке из php приходит пустой параметр , тогда идет проверка на наличие hash,
и если hash есть , тогда параметры извлекаем из него
причем если добавить проверку браузера, то можно убрать и history.js
и в html4 браузерах сразу менять значение hash
мне в php и не нужно передавать содержимое hash
а кто-то его туда передает?
короче добавил проверку браузера, отключил history , теперь ссылки кроссбраузенно открываются независимо от наличия hash в url
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot