IE 11 правильно оформляет некоторые посещенные гиперссылки, но не другие на той же странице - PullRequest
0 голосов
/ 10 мая 2018

Обратите внимание, я знаю, что мой вопрос похож на другие, которые были опубликованы.Тем не менее, ни один из других, похоже, не рассматривал ТОЧНУЮ проблему, которая у меня, кажется, есть, и при этом они не смогли предоставить жизнеспособные решения или достойные объяснения, почему это происходит.

Проблема

У меня возникла проблема, когда некоторые посещенные гиперссылки в 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.

Может кто-нибудь помочь объяснить это явление и / или помочь мне разрешить его, пожалуйста !?

1 Ответ

0 голосов
/ 11 мая 2018

Это не столько ответ, сколько признание того, что я могу описать только как ошибку в IE, и я планирую сообщить об этой информации в Microsoft.

Спасибо @meucas, что нашли время попытаться понять эту проблему. К сожалению, я не смог предоставить вам действительный тестовый пример, поскольку затронутые ссылки указывают на сайт в интрасети, который может просматривать только я.

Во всяком случае, вот что я обнаружил. Фактически, IE 11 может соблюдать :visited для всех моих гиперссылок, включая те, о которых идет речь. Все это связано с тем, как они запускаются. Позволь мне объяснить.

Я разработал еще один тест, в котором я поместил ссылки внутри iframe и удалил атрибут target. Тогда и только тогда при нажатии на ссылки (которые, естественно, открывались внутри фрейма) и последующем обновлении страницы, ссылки наконец-то появились в нужном цвете!

Опять же, этот взлом не был необходим для любого другого браузера или ссылок на любые внешние сайты. Но это был ЕДИНСТВЕННЫЙ способ, которым я мог получить локальные ссылки на свой размещенный в IIS 8.5 сайт интрасети для правильного цвета при посещении в IE.

Что это значит для меня? Ну, я не буду реализовывать фреймы в моем приложении. Таким образом, пользователям моей внутренней сети будет рекомендовано использовать Chrome.

Мир всем вам!

...