再head的地方直接设置
<base target="_blank">
你可以理解为这是声明只要没定义的,就全部默认新窗口打开,但是有些a标签会因为javascript而受到影响,导致原本的失效,那么可以用下面这个js在尽量避免网页性能消耗的情况下恢复功能,鱼和熊掌兼得
本来打算每秒钟检查一次所有 标签,单子这样对界面的性能影响,且取决于几个因素,包括页面上链接的数量、页面复杂性以及浏览器的优化程度。以下是一些可能的性能影响和建议:
可能的性能影响
DOM 操作开销: 每秒钟遍历和检查所有的 标签会对性能产生一定开销,尤其是当页面包含大量链接时。
内存和 CPU 使用: 高频率的 DOM 操作可能会增加内存和 CPU 的使用,这可能导致浏览器在低性能设备上表现不佳。
页面响应时间: 在高频率的操作中,可能会导致页面的响应时间略微增加,尤其是在较旧或低配置的设备上。
性能优化建议
降低检查频率: 如果每秒钟检查一次对性能有影响,可以考虑将检查频率降低到更长的时间间隔,例如每 5 秒或每 10 秒。
优化选择器: 如果可能,减少不必要的 DOM 查询。比如,如果你知道某些部分的链接不会改变,可以只检查这些部分。
条件触发: 如果你能确定何时会有新的 标签被动态添加,可以只在这些动态操作时进行更新,而不是定时检查所有标签。
使用 MutationObserver: 如果页面上 标签是动态生成的,考虑使用 MutationObserver 监听 DOM 变化,只有在发生变化时才进行操作。
示例优化代码
以下是一个使用 MutationObserver 的优化版本,它只在 DOM 变化时进行更新:
<script>
function updateLinks() {
var links = document.querySelectorAll('a[href^="javascript:"]');
links.forEach(function(link) {
link.setAttribute('target', '_self');
});
}
// 初始检查
updateLinks();
// 使用 MutationObserver 监听 DOM 变化
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.type === 'childList') {
updateLinks(); // 处理新增的 <a> 标签
}
});
});
observer.observe(document.body, { childList: true, subtree: true });
</script>