Как Gmail позволяет IE Back работать без обновления?

StackOverflow https://stackoverflow.com/questions/1404434

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

Как Gmail творит чудеса?

Это было полезно?

Решение 2

Другие советы

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

Здесь нужно сначала понять несколько понятий:

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

Отслеживание истории с помощью GMail в основном осуществляется с помощью трюков, основанных на этом «хеше».

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

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

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

Теперь, если GMail получит уведомление о событии при изменении хэша, Gmail сможет предпринять действия на основе этого.К сожалению, не существует событий DOM, которые могли бы помочь нам зафиксировать действия истории.Поэтому вместо этого (это та часть, которая показывает, как я преодолел проблему) мы запускаем бесконечный цикл, который проверяет изменения в хеше.Если он замечает изменение, то мы обнаруживаем нажатие кнопки «Назад» или «Вперед» браузера.

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

Ваше здоровье!


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

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

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

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

Я думаю, я бы предпочел плагин jquery.У YUI также есть менеджер истории.

Ваше здоровье!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top