我们的一些用户刚刚从IE6升级到IE7。 upgreaded用户报告在页面刷新后恢复到其未访问颜色的访问链接的问题。这仅发生在使用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链接保持在访问状态而不必对应用程序代码进行大修的工作?
谢谢。
答案 0 :(得分:1)
您真的不希望javascript:
网址维持访问/未访问状态。它们不是真实的位置,它们是浏览器在当前文档中执行的命令。
javascript:
网址也不应该被使用。
<a href="javascript:LoadGoogle()">Google using javascript</a>
这是可访问性和可用性的完全灾难。并且通常也出于搜索引擎优化的原因,但对于一个无关紧要的内部应用程序(可能谷歌在没有你帮助的情况下对他们的SEO做得很好。; - ))
<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
渲染的唯一可靠方式。
答案 1 :(得分: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
。
也许其中一个修复了它。