【问题标题】:IE7 - visited links revert to unvisted after page refreshIE7 - 页面刷新后访问的链接恢复为未访问的
【发布时间】:2010-03-30 07:16:53
【问题描述】:

我们的一些用户刚刚从 IE6 升级到 IE7。升级后的用户报告了一个问题,即在页面刷新后访问的链接恢复为未访问的颜色。这只发生在使用 javascript 而不是硬编码 URL 的链接上:

<script lang="JavaScript">
<!--
 function LoadGoogle()
 {
  var LoadGoogle = window.open('http://www.google.com');
 }
-->
</script>

<a href="javascript:LoadGoogle()">Google using javascript</a>
<a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>

每当刷新页面时,上述链接将恢复为未访问的颜色。页面是否因回发、手动点击刷新或 f5 按钮或自动刷新功能而刷新并不重要。请注意,上面的代码是对实际发生的事情的过度简化,但我相信它足以说明问题。

这给我们的用户带来了问题,因为我们为他们提供了一个项目列表,当他们被点击时,这些项目都会通过 javascript 打开到新窗口中;并在用户完成后刷新父页面。每次刷新父页面时,所有这些链接都会恢复为未访问的颜色,因此我们的用户会忘记他们处理过哪些项目。

我一直在挖掘,看起来这是预期的行为。 IE7 不会在浏览器历史记录中注册这些链接。有谁知道一种解决方法,可以让我们将这些 javascript 链接保持在已访问状态,而无需对应用程序代码进行大修?

谢谢。

【问题讨论】:

    标签: javascript internet-explorer-7 hyperlink window.open visited


    【解决方案1】:

    您不能真正期望javascript: URL 保持已访问/未访问状态。它们不是真实的位置,它们是浏览器在当前文档中执行的命令。

    javascript: URL 也不应该被使用。

    <a href="javascript:LoadGoogle()">Google using javascript</a>
    

    这对可访问性和可用性来说是一场彻底的灾难。通常也是出于 SEO 的原因,尽管对于一个无关紧要的内部应用程序(并且可能 Google 在没有您的帮助的情况下,他们的 SEO 做得很好。;-))

    <a href="#" OnClick="javascript:LoadGoogle()">Google using javascript OnClick</a>
    

    由于同样的原因,这仍然很糟糕,加上您忘记在点击处理程序中使用return false,因此页面滚动到顶部,并且事件处理程序开头的javascript: 毫无意义,因为它是不是网址。 (在这种情况下,javascript: 被视为行标签,这是一种几乎完全没有意义的语言功能,没有人真正使用过。)

    这是您想要的标记:

    <a href="http://www.google.com/" onclick="window.open(this); return false;">Google proper link</a>
    

    (实际上,您可能会使用不显眼的脚本而不是包含 onclick 属性。)

    这适用于所有设备,无论 JavaScript 是否可用,可视浏览器与否,它会在状态栏中显示正确的链接,并且允许用户使用他们所有的普通浏览器工具,例如中键单击-for-new-tab 或右键单击链接上的书签链接,而不会得到相同的页面、空白页面或错误。

    当然,它也会正确反映目标页面本身的已访问/未访问状态,这比虚假的javascript: 伪 URL 更可能准确。将href 属性指向一个真正被访问过的实际位置是获得:visited 渲染的唯一可靠方法。

    【讨论】:

      【解决方案2】:

      有趣,我以前从未遇到过这个问题,但它是有道理的。

      可能的解决方法(我现在无法测试它们,所以我只需要把它们扔在这里让你尝试一下):

      • 使用唯一哈希:&lt;a href="#JavaScriptLoadGoogle" onClick="...

        也许这足以让 IE 永久“访问”此链接:这是一个有效的位置。 (页面中不必存在该名称的实际锚点。)

      • 如果这是一个需要 JS 的应用程序,您可以将其放入href 属性中:

        <a href='http://www.google.com' 
           onclick='LoadGoogle(); return false;'>  
        <!-- You don't need the Javascript: prefix here -->
        

        但我不确定此方法是否会将 URL 注册为已访问,因为我们在点击事件中返回 false

      也许其中一个可以修复它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-11-02
        • 1970-01-01
        • 1970-01-01
        • 2011-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多