IE7: посещенные ссылки становятся невидимыми после обновления страницы.
-
23-09-2019 - |
Вопрос
Некоторые наши пользователи только что обновили IE6 до IE7.обновленные пользователи сообщают о проблеме, когда посещенные ссылки возвращаются к своему непосещенному цвету после обновления страницы.Это происходит только со ссылками, которые используют JavaScript вместо жестко запрограммированного URL-адреса:
<script lang="JavaScript">
<!--
function LoadGoogle()
{
var LoadGoogle = window.open('http://www.google.com');
}
-->
</script>
<a href="javascript:LoadGoogle()">Google using javascript</a>
<a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>
Вышеупомянутые ссылки вернутся к непосещенному цвету при каждом обновлении страницы.Не имеет значения, обновляется ли страница из-за обратной публикации, ручного нажатия кнопки обновления или кнопки F5 или функции автоматического обновления.Обратите внимание: приведенный выше код является чрезмерным упрощением того, что происходит на самом деле, но я считаю, что он достаточно хорошо иллюстрирует проблему.
Это создает проблему для наших пользователей, поскольку мы предоставляем им список элементов, которые открываются в новых окнах с помощью JavaScript при нажатии на них;и обновить родительскую страницу, когда пользователи закончат с ней.Каждый раз, когда родительская страница обновляется, все эти ссылки возвращаются к своему непросмотренному цвету, поэтому наши пользователи теряют представление о том, над какими элементами они работали.
Я копался и похоже, что это намеренное поведение.IE7 не регистрирует эти ссылки в истории браузеров.Кто-нибудь знает обходной путь, который позволит нам сохранять эти ссылки Javascript в посещенном состоянии без необходимости капитального ремонта кода приложений?
Спасибо.
Решение
Вы не можете действительно ожидать javascript:
URL-адрес для сохранения посещенного/непосещенного состояния.Это не реальные места, а команды браузера, которые он должен выполнить в текущем документе.
javascript:
URL-адреса также никогда не должны использоваться.
<a href="javascript:LoadGoogle()">Google using javascript</a>
Это полная катастрофа с точки зрения доступности и удобства использования.И обычно по причинам SEO, хотя для внутреннего приложения это не имеет значения (и, возможно, у Google все в порядке со своим SEO без вашей помощи.;-))
<a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>
Это все равно плохо по тем же причинам, плюс вы забыли return false
в обработчике кликов, поэтому страница прокручивается вверх, а javascript:
в начале обработчика событий бессмысленно, поскольку это не URL-адрес.(В данном контексте, javascript:
воспринимается как метка строки, что является почти совершенно бессмысленной функцией языка, которую никто никогда по-настоящему не использует.)
Вот какая разметка вам нужна:
<a href="http://www.google.com/" onclick="window.open(this); return false;">Google proper link</a>
(На самом деле вы, вероятно, предпочли бы написать ненавязчивый сценарий, а не включать onclick
атрибут.)
Это будет работать на всех устройствах, независимо от того, доступен ли JavaScript или нет, в визуальном браузере или нет, в строке состояния будет отображаться правильная ссылка, и это позволит пользователю использовать все свои обычные инструменты браузера, такие как средний щелчок для... Новая вкладка или щелчок правой кнопкой мыши по ссылке-закладке без получения той же страницы, пустой страницы или ошибки.
Естественно, он также будет правильно отражать посещенное/непосещенное состояние самой целевой страницы, что с гораздо большей вероятностью будет точным, чем ложное javascript:
псевдо-URL.Указывая href
атрибут фактического местоположения, которое действительно было посещено, является единственным надежным способом получить :visited
рендеринг.
Другие советы
Интересно, я никогда раньше не сталкивался с этой проблемой, но это имеет смысл.
Возможные обходные пути (я не могу их протестировать прямо сейчас, поэтому мне просто нужно выложить их сюда, чтобы вы могли опробовать, если хотите):
Используйте уникальные хеши:
<a href="#JavaScriptLoadGoogle" onClick="...
Возможно, этого достаточно, чтобы IE сделал эту ссылку постоянно «посещаемой»:Это допустимое местоположение.(На странице не обязательно должна быть привязка с таким именем.)
Если это приложение, которое требует JS, вы можете просто поместить это количество посещений в
href
атрибут:<a href='http://www.google.com' onclick='LoadGoogle(); return false;'> <!-- You don't need the Javascript: prefix here -->
Однако я не уверен, зарегистрирует ли этот метод URL-адрес как посещенный, поскольку мы возвращаем
false
в событии клика.
Возможно, что-то из этого исправит ситуацию.