IE 11正在设置一些访问过的超链接,但在同一页面上没有其他超链接

时间:2018-05-09 22:44:45

标签: css internet-explorer hyperlink cache-control visited

请注意,我知道我的问题与已发布的其他问题类似。然而,其他人似乎都没有解决我似乎遇到的确切问题,也没有能够提供可行的解决方案或正当解释为什么会这样。

问题

我遇到的问题是IE 11中的一些访问过的超链接遵守我的:visited CSS规则,而其他人没有。这些链接都在同一页面上。

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

同样,在IE 11中已经观察到,并且会影响运行IIS 8.5的网络服务器所服务的网页的超链接。这就像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中)!

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

结论

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

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

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

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

同样,:visited在所有其他浏览器中都获得100%的荣誉。对于外部站点和本地指向的链接(在Visual Studio中运行),它在IE中获得100%的荣誉。它只会在指向IIS中运行的应用程序的链接上在IE中运行。

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

1 个答案:

答案 0 :(得分:0)

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

感谢@meucas花时间尝试了解此问题。遗憾的是,由于受影响的链接指向只能浏览的Intranet站点,我无法为您提供有效的测试用例。

无论如何,这是我发现的。事实上,IE 11可以在我的所有超链接上尊重:visited,包括那些超链接。这一切都与他们如何推出有关。让我解释。

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

同样,任何其他浏览器或任何外部网站的链接都不需要此hack。但这是我在IE浏览器中访问我的IIS 8.5托管内部网站点的本地链接的唯一方式。

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

和平大家!