1

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

问题

我遇到了一个问题,即 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 Schools 链接显示为红色(如预期的那样),但我的应用程序链接没有(仅在 IE 11 中)!

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

结论

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

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

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

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

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

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

4

1 回答 1

0

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

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

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

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

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

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

祝大家平安!

于 2018-05-11T13:29:28.597 回答