2009-06-05 2 views
2

У меня есть сайт с привязной навигацией (например, gmail, когда значение привязки меняет новый контент для страницы, загружается с помощью ajax). В Firefox, когда я меняю якорь (с помощью js или со страницей), новый элемент в истории создается и работает отлично. Но в IE6 он не сохраняет этот новый элемент, а кнопка «Назад» работает не так, как ожидалось.Сохраните привязку в истории ie6

Можно ли добавить этот новый элемент, используя javascript? Это возможно, потому что gmail делает это, но я не знаю, как это делается.

ответ

9

Я сделал лот работы с историей и использованием хэша. Почти у всех существующих плагинов истории есть своего рода пробел в них. Один я использовал это довольно близко к идеальному, это один, который является плагин JQuery:

http://www.mikage.to/jquery/jquery.history.js

Он был обновлен в марте этого года обрабатывает IE 8 вопросов, и она также имеет дело с IE6 довольно успешно. Одна вещь, которую я заметил, это то, что IE действительно ненавидит? в хеше после #. Он перестает правильно обрабатывать хэш, когда? настоящее. Даже этот, я думаю, нуждается в небольшом патче для?, Мне действительно нужно отправить его в Микаге. Способ справиться с этим, вместо того, чтобы использовать location.hash в плагине при ссылке на хэш, используйте эту функцию:

function getHash(loc) { 
    loc = loc.toString(); 
    if (loc.indexOf("#") != -1) 
     return loc.substring(loc.indexOf("#")); 
     else return ""; 
} 

Таким образом, в тех местах, где вам нужно хэш, передать location функционировать ...

getHash(location) 

... вместо использования location.href. Но обратите внимание, что для IE, поскольку он использует iframe, вы хотите использовать iframe.location.

getHash(iframe.location) 

Bug Yahoo,

Вы можете видеть, что Yahoo не корректно обрабатывать 's в IE, если смотреть на этот URL:

http://developer.yahoo.com/yui/examples/history/history-tabview.html#tabview=tab1?7236471234

Он должен просто игнорировать несуществующий модуль (который он делает для других имен, в которых нет?). Но это вызывает ошибку JavaScript, когда? находится в URL-адресе.

(Я направляю этот список в настоящее время)

Действительно Просто история

Честно говоря, это основная проблема, кажется, он ушел в спящем состоянии. Я испытал this issue и просто не хотят, чтобы вырыть через него:

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

+0

+1 за пробелы, но что более важно для? после #, который может быть легко убийцей здесь – annakata

+0

Я никогда не слышал о '#?' выпуск перед тем. Хорошо знать. –

+0

Самое смешное, что я смоделировал свою функцию истории работать точно так же, как URL-адрес, и думал, что я очень умный. После блуждания по поводу различных реализаций, и, увидев, что у меня все получилось, я столкнулся с facebook, который, случается, использует очень похожую идею для отслеживания истории. Честно говоря, я должен превратить это в более плавный плагин, который дополняется парсером URL и делает его управляемым событием. – cgp

0

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

Предлагаю вам попробовать несколько разных копий и версий IE6 на других машинах, чтобы исключить их, а затем попробуйте упростить код и перестроить его, чтобы увидеть, появляется ли и когда возникает проблема. Отключение JS может (html в зависимости) быть быстрым способом проверить это.

Если все остальное терпит неудачу, я предлагаю вам взглянуть на Really Simple History который (последний раз я проверил) решает почти все проблемы/историй JS вы можете бросить на нее.

Смежные вопросы