IE7: посещенные ссылки становятся невидимыми после обновления страницы.

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

Вопрос

Некоторые наши пользователи только что обновили 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 в событии клика.

Возможно, что-то из этого исправит ситуацию.

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