IE7 - посещенные ссылки после обновления страницы возвращаются в неиспользованные - PullRequest
2 голосов
/ 30 марта 2010

Некоторые наши пользователи только что обновились с 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 в состоянии посещения без необходимости капитального ремонта кода приложений?

Спасибо.

Ответы [ 2 ]

1 голос
/ 30 марта 2010

Вы не можете ожидать, что 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 доступен или нет, визуальный браузер или нет, он покажет правильную ссылку в строке состояния и позволит пользователю использовать все свои обычные инструменты браузера, такие как средний щелчок -for-new-tab или ссылка правой кнопкой мыши на ссылке без ссылки на ту же страницу, пустую страницу или ошибку.

Естественно, он также будет правильно отражать посещенное / не посещенное состояние самой целевой страницы, что с гораздо большей вероятностью будет точным, чем ложный javascript: псевдо-URL. Указание атрибута href на фактическое местоположение, которое действительно было посещено, является единственным надежным способом получения :visited рендеринга.

0 голосов
/ 30 марта 2010

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

Возможные обходные пути (сейчас я не могу их протестировать, поэтому мне просто нужно выкинуть их сюда, чтобы вы попробовали, если хотите):

  • Используйте уникальные хэши: <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 в событии click.

Может быть, одно из этих исправлений.

...