Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Как поменять url в ie (https://javascript.ru/forum/css-html-internet-explorer/42388-kak-pomenyat-url-v-ie.html)

jobmsk 24.10.2013 11:37

Как поменять url в ie
 
Приветствую !

Посоветуйте скрипт, который меняет URL в адресной строке в HTML4 браузерах в частности IE8 и конечно без перезагрузки страницы

history.js не подходит по двум причинам: глючит и добавляет #.
Необходимо чтобы url менялся без добавления #, как на facebook ,youtube и тп

Заранее благодарен.

devote 24.10.2013 12:43

Цитата:

Сообщение от jobmsk
history.js не подходит по двум причинам: глючит и добавляет #.

и в чем заключается глючисть? а от решетки в HTML4 браузерах, никуда не денетесь.
Цитата:

Сообщение от jobmsk
Необходимо чтобы url менялся без добавления #

для HTML4 браузеров это не возможно!
Цитата:

Сообщение от jobmsk
как на facebook ,youtube и тп

правда что ли? они нашли способ как менять юрл в древних браузерах? Не поверю, вы скорее всего просто что-то путаете.

А для новых браузеров используйте History-API

jobmsk 24.10.2013 12:52

Цитата:

и в чем заключается глючисть? а от решетки в HTML4 браузерах, никуда не денетесь.
если приходит линк например с www.xxx.ru?ie=md
то при попытке заменить ?ie=md на ?ie=md1
получаешь ?ie=md#?ie=md1

по такому линку юзер ничегог не откроет
www.xxx.ru?ie=md#?ie=md1

правда что ли? они нашли способ как менять юрл в древних браузерах?

Цитата:

Не поверю, вы скорее всего просто что-то путаете.

а зачем верить, нужно проверить зайдите в ie на них

devote 24.10.2013 12:58

Цитата:

Сообщение от jobmsk
то при попытке заменить ?ie=md на ?ie=md1
получаешь ?ie=md#?ie=md1

это не глючисть а фича, так как удаление из ЮРЛа что либо до решетки, приведет в HTML4 браузерах к перезагрузке страницы. Поэтому что бы страница не перезагружалась, основной ЮРЛ не модифицируется.

Цитата:

Сообщение от jobmsk
а зачем верить, нужно проверить зайдите в ie на них

Зашел из ИЕ9, вижу страницы перезагружаются во всю. Внимательнее смотрите, просто ИЕ иногда так быстро загружает страницы что кажется что вовсе и не было перезагружено ничего. А в реальности все перезагружается.

danik.js 24.10.2013 14:33

Цитата:

Сообщение от jobmsk
Необходимо чтобы url менялся без добавления #, как на facebook ,youtube и тп

Есть категория людей, которая считает что такие крутые сайты умеют творить магию и обладают особой силой. А простые сайты об этом как бы не догадываются и не используют ничего подобного.

jobmsk 24.10.2013 15:13

Цитата:

Сообщение от devote (Сообщение 277926)
это не глючисть а фича, так как удаление из ЮРЛа что либо до решетки, приведет в HTML4 браузерах к перезагрузке страницы. Поэтому что бы страница не перезагружалась, основной ЮРЛ не модифицируется.

согласен ,что фича..придется с ней смириться..


Цитата:

Зашел из ИЕ9, вижу страницы перезагружаются во всю. Внимательнее смотрите, просто ИЕ иногда так быстро загружает страницы что кажется что вовсе и не было перезагружено ничего. А в реальности все перезагружается.
да, действительно....возможно не заметил ОООчень быструю перезагрузку
когда iE запретят?

devote 24.10.2013 15:16

Цитата:

Сообщение от jobmsk
придется с ней смириться..

есть обходные пути, но придется под них реализовывать свой сайт.

Цитата:

Сообщение от jobmsk
когда iE запретят?

когда умрет интернет наверное))))

jobmsk 24.10.2013 15:57

Цитата:

Сообщение от devote (Сообщение 277964)
есть обходные пути, но придется под них реализовывать свой сайт.

какие пути имеете ввиду?

devote 24.10.2013 16:04

Цитата:

Сообщение от jobmsk
какие пути имеете ввиду?

как убрать часть до решетки: ?ie=md. Но решетку в любом случае не уберете.

Библиотека которая написана мною. Имеет некоторые возможности для реализации ссылок хотя бы вида: http://example.com/#?ie=md1, вместо http://example.com/?ie=md#?ie=md1

Для этого вам придется подшаманить на сервере с настройками HTTP-сервера. И на клиенте либо передать аргумент redirect=true или вызвать метод history.redirect();

К сожалению сайт на котором я демонстрировал это, на данный момент не работает. Там можно было посмотреть реализацию.

devote 24.10.2013 16:24

примерно так положить это в 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]


Часовой пояс GMT +3, время: 11:49.