Edge Chromium中a:visited失效的解决办法咨询
Edge Chromium已访问超链接不显示状态的解决办法
核心问题就是你用的javascript:void(0)这类伪协议链接——浏览器不会把这类链接标记为已访问状态,因为它们没有指向实际可记录的URL。再加上现代浏览器(包括Edge Chromium)出于隐私安全限制,对:visited伪类的行为做了严格约束,进一步导致这类链接无法触发已访问样式。
下面是几个不用javascript:void的替代方案:
方案1:直接用真实URL+target属性
把href设为实际要跳转的地址,用target="_onejob"指定新窗口打开,完全不需要JS伪协议:
<style> a:link { color: green } a:visited { color: pink } a:hover { color: red } a:active { color: orange } </style> <a title='<%=alttext%>' alt='<%=alttext%>' href="oneJob.asp?key=<%=jnum%>" target="_onejob"> <%=partorppid%> </a>
这样浏览器会正常记录该URL为已访问,:visited样式就能正常生效。
方案2:真实URL占位+自定义点击事件
如果需要在点击时执行额外JS逻辑(比如打开窗口前做判断),可以先把href设为真实URL,再通过onclick自定义行为并阻止默认跳转:
<style> a:link { color: green } a:visited { color: pink } a:hover { color: red } a:active { color: orange } </style> <a title='<%=alttext%>' alt='<%=alttext%>' href="oneJob.asp?key=<%=jnum%>" onclick="window.open(this.href, '_onejob'); return false;"> <%=partorppid%> </a>
这里href是真实地址,浏览器会标记已访问;onclick里执行打开窗口的逻辑,return false阻止默认跳转,和原逻辑效果一致,但能触发:visited样式。
方案3:手动模拟已访问状态(兜底方案)
如果以上方案都不适用,可以在点击链接后手动给元素加自定义类来模拟已访问效果:
<style> a:link { color: green } a:visited, a.visited { color: pink } a:hover { color: red } a:active { color: orange } </style> <a title='<%=alttext%>' alt='<%=alttext%>' href="javascript:void(0)" onclick="window.open('oneJob.asp?key=<%=jnum%>','_onejob'); this.classList.add('visited');"> <%=partorppid%> </a>
注意:刷新页面后手动添加的类会消失,如果需要持久化,得用localStorage记录已访问的链接ID,页面加载时再恢复类状态。
补充:现代浏览器限制:visited是为了防止恶意网站通过读取链接样式探测用户浏览历史,所以只有真实的、被浏览器记录在历史中的URL才能触发:visited样式,伪协议、空链接都不行。
内容的提问来源于stack exchange,提问作者caseyboy77
相关产品推荐
相关产品推荐

