IE 11 正在正确设置某些访问过的超链接的样式,但不能在同一页面上设置其他超链接的样式



请注意,我知道我的问题与已发布的其他问题相似。 但是,其他人似乎都没有解决我似乎遇到的确切问题,也无法提供可行的解决方案或体面的解释来解释为什么会发生这种情况。

问题

我遇到了一个问题,即IE 11中某些访问过的超链接遵守我的:visitedCSS规则,而其他人则不遵守。 这些链接都在同一页面上。

遵循 CSS:visited的超链接指向外部网站,而不支持的超链接是指向我的应用程序中的页面的超链接,但仅在 IE 中并且仅当它们指向在 IIS 8.5 中运行的应用程序时。 在所有其他情况下(例如,当我在本地工作并且链接指向localhost即我的应用程序在Visual Studio 2017的默认内置Web服务器中本地运行时(没有问题,即使IE行为正常。

同样,这仅在IE 11中观察到,并且影响运行IIS 8.5的Web服务器所服务的页面的超链接。 就像IE很难承认这些页面在其浏览历史记录中一样(我检查过它们是(。

假设

有人告诉我,这与不同的Web服务器如何提供内容有关,尤其是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 学校链接显示为红色(如预期的那样(,但我的应用程序链接没有(仅在IE 11中(!

(一位同事在 Edge 中查看了我的测试页面,没有一个链接保持红色,但我们现在不要去那里。

结论

我无法确定是什么阻止IE尊重某些链接的:visited,而不是同一页面上的其他链接。

不是链接引用是否https,在我的测试页面中它们都是https的。

这也不取决于访问过的页面是否出现在我的历史记录中,所有 5 个链接的 URL 都出现在我的历史记录中。

这不是页面是否被浏览器缓存的问题。 虽然这里有一些有趣的东西。 IIS 将Cache-Control: private附加到每个 HTTP 响应,我觉得这很奇怪,但它不应该影响本地浏览器缓存。 它只应该防止在代理/中间服务器级别缓存。 即便如此,这也无助于解释这种奇怪的行为(是吗?

同样,:visited在所有其他浏览器中都受到 100% 的尊重。 在IE中,对于指向本地(在Visual Studio中运行(的外部站点和链接,它100%受到尊重。 它仅在 IE 中指向在 IIS 中运行的应用程序的链接上跳闸。

任何人都可以帮助解释这种现象和/或帮助我解决它,请!?

这与其说是一个答案,不如说是对我只能描述为 IE 中的错误的承认,我计划将此信息报告给Microsoft。

感谢您@meucas花时间尝试理解这个问题。 可悲的是,由于受影响的链接指向只有我可以浏览的 Intranet 站点,我无法为您提供有效的测试用例。

无论如何,这是我发现的。 事实上,IE 11 有可能在我的所有超链接(包括有问题的超链接(上尊重:visited。 这一切都与它们的启动方式有关。 让我解释一下。

我设计了另一个测试,将链接放在iframe内并删除了target属性。 直到那时,只有当单击链接(自然地在框架内打开(并随后刷新页面时,链接才最终以所需的颜色出现!

同样,对于任何其他浏览器或指向任何外部站点的链接,都不需要此黑客攻击。 但这是我在 IE 中访问时获得指向我的 IIS 8.5 托管内部网站的本地链接以正确着色的唯一方法。

这对我意味着什么? 好吧,我不会在我的应用程序中实现框架。 因此,我的内联网用户将被建议使用Chrome。

祝大家平安!

最新更新