Обратите внимание, я знаю, что мой вопрос похож на другие, которые были опубликованы.Тем не менее, ни один из других, похоже, не рассматривал ТОЧНУЮ проблему, которая у меня, кажется, есть, и при этом они не смогли предоставить жизнеспособные решения или достойные объяснения, почему это происходит.
Проблема
У меня возникла проблема, когда некоторые посещенные гиперссылки в IE 11 соблюдают мои :visited
правила CSS, а другие - нет.Все эти ссылки находятся на одной странице.
Гиперссылки, учитывающие CSS :visited
, относятся к внешним веб-сайтам, а ссылки не ссылаются на страницы в моем приложении, но ТОЛЬКО в IE.и ТОЛЬКО когда они указывают на мое приложение, работающее в IIS 8.5.Во всех других случаях (например, когда я работаю локально, а ссылки указывают на localhost
, т. Е. Мое приложение работает локально на встроенном веб-сервере Visual Studio 2017 по умолчанию), проблем нет, даже IE ведет себя правильно.
Опять же, этот только наблюдался в IE 11, и он только влияет на гиперссылки на страницы, обслуживаемые нашим веб-сервером под управлением IIS 8.5.Как будто IE с трудом признает, что эти страницы находятся в его истории посещений (я проверял их).
Гипотеза
Что-то говорит мне, что это связано с тем, как обслуживают различные веб-серверы.содержимое, особенно заголовки ответа HTTP (см. 4-й абзац в разделе «Заключение»).
Мое приложение
Следующее извлечено из моего приложения.Эти гиперссылки должны отображаться красным цветом, если они были посещены.(И по большей части они делают, кроме как указано выше.)
ASP.NET
<asp:GridView runat="server" ID="resultsGridView" CssClass="results-grid">
<Columns>
<asp:HyperLinkField
HeaderText="Item #"
DataNavigateUrlFormatString="~/ItemDetails.aspx?id={0}"
DataNavigateUrlFields="ItemId"
DataTextField="ItemId"
ItemStyle-CssClass="item-number">
</asp:HyperLinkField>
<asp:BoundField>...</asp:BoundField>
</Columns>
<AlternatingRowStyle>...</AlternatingRowStyle>
</asp:GridView>
CSS
.results-grid .item-number {
font-weight: bold;
white-space: nowrap;
}
.results-grid .item-number a:visited {
color: red;
}
Я пошел еще дальше и добавилтестовая страница на мой сайт с жестко закодированными ссылками.Три ссылки ведут на внешние веб-сайты, а две другие - это жестко запрограммированные версии ссылок, обслуживаемых IIS, из вида сетки (см. Выше).
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
a:visited {
color: red;
}
</style>
</head>
<body>
<a href="https://www.w3schools.com">W3Schools Home</a><br/>
<a href="https://www.w3schools.com/html/">W3Schools HTML Tutorial</a><br/>
<a href="https://www.w3schools.com/css/">W3Schools CSS Tutorial</a><br/>
<a href="https://example.com/ItemDetails.aspx?id=201725">201725</a><br/>
<a href="https://example.com/ItemDetails.aspx?id=201774">201774</a>
</body>
</html>
После нажатия на каждую ссылку, ссылки W3 Schools появились вкрасный (как и ожидалось), но ссылки на мои приложения этого не сделали (только в IE 11)!
(сотрудник просмотрел мою тестовую страницу в Edge, и ни одна из ссылок не осталась красной, но давайте сейчас не будем переходить туда).
Заключение
Я не могу определить, что мешает IE игнорировать :visited
для некоторых ссылок, а не для других на той же странице.
Это не ссылка на ссылку https
, на моей тестовой странице они все https
.
Это также не зависит от того, появляются ли посещенные страницы в моей истории, URL всех 5 ссылок появляются в моей истории.
Дело не в том, кэшируются ли страницы браузером.Хотя вот кое-что интересное.IIS добавляет Cache-Control: private
к каждому HTTP-ответу, который мне кажется странным, но он не должен влиять на кэширование в локальном браузере.Предполагается только предотвратить кэширование на уровне прокси / промежуточного сервера.Даже если это не поможет объяснить это странное поведение (не так ли?).
Опять же, :visited
соблюдается на 100% во всех других браузерах.В IE это 100% для внешних сайтов и ссылок, которые указывают локально (работает в Visual Studio).В IE он срабатывает только по ссылкам, указывающим на приложение, работающее в IIS.
Может кто-нибудь помочь объяснить это явление и / или помочь мне разрешить его, пожалуйста !?