Сохранить якорь в истории ie6 - PullRequest
2 голосов
/ 05 июня 2009

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

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

Ответы [ 3 ]

9 голосов
/ 05 июня 2009

Я сделал много работы с историей и использованием хэша. Почти во всех существующих плагинах истории есть какой-то пробел. Тот, который я использовал, который довольно близок к идеальному, это плагин 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)

Ошибка Yahoo

При просмотре этого URL вы можете видеть, что Yahoo не корректно обрабатывает? В IE:

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

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

(я расширю этот список чуть позже)

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

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

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

0 голосов
/ 05 июня 2009
0 голосов
/ 05 июня 2009

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...