【发布时间】:2018-10-20 03:28:56
【问题描述】:
请注意,我知道我的问题与已发布的其他问题相似。但是,其他人似乎都没有解决我似乎遇到的确切问题,也无法提供可行的解决方案或体面的解释来说明为什么会发生这种情况。
问题
我遇到了一个问题,即 IE 11 中的某些已访问超链接遵守我的 :visited CSS 规则,而其他人则不遵守。这些链接都在同一个页面上。
尊重 CSS :visited 的超链接指向外部网站,而那些不指向我的应用程序内页面但仅在 IE 中且仅当它们指向我在 IIS 8.5 中运行的应用程序时的超链接。在所有其他情况下(例如,当我在本地工作并且链接指向 localhost 时,即我的应用程序在 Visual Studio 2017 的默认内置 Web 服务器中本地运行时)没有问题,即使 IE 运行正常。
同样,在 IE 11 中观察到了这种only,它only会影响到由运行 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 Schools 链接显示为红色(如预期的那样),但我的申请链接没有(仅在 IE 11 中)!
(一位同事在 Edge 中查看了我的测试页面,所有链接都没有保持红色,但我们现在不要去那里。)
结论
我无法确定是什么阻止了 IE 为某些链接而不是同一页面上的其他链接兑现 :visited。
与链接引用是否为https无关,在我的测试页面中它们都是https。
这也不取决于访问过的页面是否出现在我的历史记录中,所有 5 个链接的 URL 都出现在我的历史记录中。
这与浏览器是否正在缓存页面无关。虽然这里有一些有趣的东西。 IIS 将Cache-Control: private 附加到我觉得很奇怪的每个 HTTP 响应中,但它不应该影响本地浏览器缓存。它只应该防止在代理/中间服务器级别缓存。即便如此,这也无助于解释这种奇怪的行为(是吗?)。
同样,:visited 在所有其他浏览器中都得到 100% 的认可。对于指向本地的外部站点和链接(在 Visual Studio 中运行),它在 IE 中获得 100% 的荣誉。它只会在指向在 IIS 中运行的应用程序的链接上在 IE 中跳闸。
谁能帮助解释这个现象和/或帮我解决它,拜托!?
【问题讨论】:
-
如果没有工作示例,这很难测试。您可以发布带有链接的输出 html 吗?
-
恐怕行不通。我想我应该指定有问题的站点是一个 Intranet 站点,因此您将无法正确测试它。今天我测试了指向我们几个面向公众的网站的链接,希望它们的行为相似,但可惜它们工作得很好。 :( 否则我会满足您的要求并为您提供该测试。
-
您可以只发布带有链接的
html片段吗?
标签: css internet-explorer hyperlink cache-control visited