Подтвердить что ты не робот

Как Gmail делает работу в IE без обновления?

Gmail использует #, когда вы нажимаете на письмо, чтобы различать страницу (+ действие Ajax). http://mail.google.com/mail/#inbox/1238e709e37a1394

Я нашел: Google использует # вместо поиска? в URL. Почему?

В FF или Chrome вы можете использовать Forward и Back без обновления между этими URL-адресами: http://X.com/MyPage.aspx#1 http://X.com/MyPage.aspx#2 http://X.com/MyPage.aspx#3

Но в IE обновляется страница, и она не учитывает параметры после #, когда выполняется обратное действие.

Как Gmail совершает магию?

4b9b3361

Ответ 2

Я могу дать вам ответ на этот вопрос, потому что я столкнулся и решил эту проблему.

Вначале есть несколько понятий:

  • javascript не может напрямую изменять историю браузера.
  • всякий раз, когда изменяется базовый URL-адрес iframe на странице, история обновляется. (но у этого есть некоторые причуды с разными браузерами).
  • url имеет "хэшированную" часть: например, в URL http://mail.google.com/mail#inbox, #inbox - хешированная часть. Давайте назовем его "хэш". поэтому http://mail.google.com/mail будет нашим "базовым URL".

История отслеживания GMail в основном выполняется с использованием трюков, основанных на этом "хэше".

Итак, еще несколько концепций:

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

Итак, когда вы переходите от http://mail.google.com/mail#inbox до http://mail.google.com/mail#sent, страница не обновляется.

Теперь, если GMail должен был получить уведомление о событии, когда хеш изменился, тогда gmail может предпринять действия на основе этого. К сожалению, нет событий DOM, которые могут помочь нам захватить действия истории. Итак, вместо этого (это та часть, которая показывает, как я преодолел проблему), мы запускаем бесконечный цикл, который проверяет изменения хэша. Если он соблюдает изменение, мы обнаруживаем щелчок кнопки "назад" или "вперед" браузера.

В решении этого я сделал удобный инструмент: парсер URL. Он может анализировать параметры GET в URL-адресе, а также параметры, закодированные в Hash. Дайте демо-версию!

Ура!


Об этой проблеме в IE: я не понимал, что это "хэш-решение" не работает на IE (плохой старый разработчик Linux).

Но для IE вы можете использовать скрытый iframe и использовать его свойство "url влияет на историю" для реализации истории. Я знаю, что в этом заявлении отсутствуют детали, но это связано с моим собственным отсутствием опыта работы с IE.

Я попробую это решение и продолжу:)

Я нашел множество ссылок в Интернете, которые делают правильные реализации истории, используя хэш iframes/location. У меня не было терпения, чтобы разобраться в различиях между интерфейсом iframe в разных браузерах.

Думаю, я предпочел jquery plugin. YUI также имеет менеджера по истории.

Ура!