2

我们的一些用户刚刚从 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 链接保持在已访问状态,而无需对应用程序代码进行大修?

谢谢你。

4

2 回答 2

1

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

javascript:也不应使用 URL。

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

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

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

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

这是您想要的那种标记:

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

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

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

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

于 2010-03-29T23:10:48.940 回答
0

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

可能的解决方法(我现在无法测试它们,所以我只需将它们扔在这里供您尝试):

  • 使用唯一的哈希:<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在 click 事件中返回。

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

于 2010-03-29T21:12:02.707 回答