Javascript-форум (https://javascript.ru/forum/)
-   Javascript под браузер (https://javascript.ru/forum/css-html/)
-   -   изменение в адресной строке (https://javascript.ru/forum/css-html/39573-izmenenie-v-adresnojj-stroke.html)

riva 04.07.2013 17:03

изменение в адресной строке
 
Всем здрасти! Пользователь ввел в адресную строку адрес и нажал enter.
Как это узнать?

danik.js 04.07.2013 22:46

Установить скрытую камеру в его комнате например. Или закинуть кейлоггер. А если ваш адрес ввел, то вы об этом можете узнать по пришедшему к вашему веб-серверу характерному HTTP-запросу

riva 05.07.2013 21:16

Сначала не понял Вашу иронию, но читая свои слова сейчас, я сам просто умираю от смеха. Но я спрашивал немного о другом. Если я правильно понимаю, то ссылка вида
Цитата:

http://site.ru/#/one
на самом деле выглядит
Цитата:

http://site.ru/
то есть написав ссылку как в первом примере, на самом деле я перейду по адресу, как во втором примере.Мои минимальные познания говорят, что можно при входе проверять window.location.hash, но я не буду дальше продолжать, потому что вы и сами наверняка знаете, что так не работает. И я опять не знаю как спросить...может - какое событие есть для проверки адресной строки?

riva 05.07.2013 21:18

Вот ещё посмеялся))) Оказывается сайт.ру существует и я ему сейчас ссылку разместил на одном из топовых сайтов))))

danik.js 05.07.2013 21:43

Почему же не работает? location.hash можно спокойно считывать. Чтобы не ходить вокруг да около, опишите что вы хотите реализовать.

riva 05.07.2013 22:40

Цитата:

Чтобы не ходить вокруг да около, опишите что вы хотите реализовать.
я уже описывал, но боюсь, что и в этот раз вы можете не до конца понять.
Флеш встроена в html оболочку при помощи swfobject ( это js
код и правильнее сказать, что флеш встроена в штмл при помощи явы).
В самом флеше сделал своё событие которое обменивается с файлом.js и грузит в себя то, что соответствует адресной строке. Сама адресная строка формируется во флеше и отправляется в яву которая её добавляет в строку и после этого отсылает её обратно во флеш.
То что у меня не получается можно описать так:
в штмл написана строчка:
console.log(window.location.hash);

и кода я вхожу использую адрес
http://site.ru/#/one

то код распознаёт строку, в консоль будет выведен этот адрес.
Так мне и нужно, но только всегда!
Вот если находясь на странице
http://site.ru/#/one

я в адресной строке наберу
http://site.ru/#/two

и нажму ентер, то не чего не произойдет. Консоль молчит, а значит и весь остальной код не будет работать так как оно не получило уведомление об этом. Как можно узнать об изменении?

danik.js 05.07.2013 22:52

Событие window@hashchange

<a href="#hash">Смена путем перехода по якорю</a>
<button onclick="location.hash = 'abc'">Смена скриптом</button>
<script>
window.onhashchange = function(e){
    alert(e.type + ' hash =' + location.hash);
};
</script>

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

riva 05.07.2013 23:53

danik.js Большое Вам Спасибо! Но теперь у меня другой вопрос.
Событие onhashchange мне не помогло, точнее сказать, оно точно так же срабатывало только один раз. я начал смотреть в гугле и пришёл на сайт https://developer.mozilla.org/ . Начал читать и пробовать, но результат был тот же. Потом я увидел ссылку на событие window.onpopstate применив который я увидел воочию, что события вызываются. Но мне не понятно вот, что..Если у меня не работает так как мне показали Вы - это плохо?)

riva 06.07.2013 14:31

Ошибку я свою понял! У меня получается ( как я думаю ) hash === hash всегда. Либо эта конструкция не работает без чего то, о чем вы мне не сказали. Моя логика тут не применима и я не знаю что делать. Как по мне, то код ниже должен работать:
//если hash не ноль, то подписываемся на событие
if(typeof window.hash !== null)
        {
            window.addEventListener('onhashchange',this.changeHandler);
        }
        function changeHandler(e)
        {
            console.log( e.type );
        }

Мне все же кажется, что я чего то не знаю.

riva 06.07.2013 15:26

Если сделать события с вызовом метода, то работает при входе, дальнейшее изменение не происходят
window.onhashchange = change;
    function change()
    {
        console.log('reed');
    }

Если сделать без вызова, то не работает при входе, но работает при последующий изменениях
window.onhashchange = change();
    function change()
    {
        console.log('reed');
    }

чего яя не понимаю?


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