如何移除Blogger网址中的年份与月份信息
解决Blogger链接移除年月后跳转延迟+404问题
你之前用JS跳转的方式之所以会出现先到404再跳转的问题,是因为点击链接时会先触发原URL的请求,之后才执行JS的跳转逻辑。要解决这个问题,核心是让用户点击的直接就是移除年月后的正确链接,而不是点击后再修改跳转地址。
方案1:提前修改页面所有静态链接的href
在DOM加载完成后,直接遍历页面内的Blogger链接,把href里的/YYYY/MM/部分替换掉,用户点击时直接访问修正后的地址:
document.addEventListener('DOMContentLoaded', function() { // 筛选所有指向Blogger域名的链接 const bloggerLinks = document.querySelectorAll('a[href*=".blogspot.com/"]'); bloggerLinks.forEach(link => { const originalUrl = link.href; // 正则匹配并移除年份和月份路径段 const cleanedUrl = originalUrl.replace(/\/\d{4}\/\d{2}\//, '/'); if (cleanedUrl !== originalUrl) { link.href = cleanedUrl; // 如果链接文本显示的是原URL,也可以同步更新文本 // if (link.textContent.trim() === originalUrl) link.textContent = cleanedUrl; } }); });
方案2:用事件委托处理动态加载的链接
如果页面有动态生成的链接(比如滚动加载、异步渲染的内容),用事件委托监听点击事件,在跳转前直接修改目标地址:
document.addEventListener('click', function(e) { // 找到被点击的Blogger链接(支持嵌套元素的情况) const targetLink = e.target.closest('a[href*=".blogspot.com/"]'); if (targetLink) { const originalUrl = targetLink.href; const cleanedUrl = originalUrl.replace(/\/\d{4}\/\d{2}\//, '/'); if (cleanedUrl !== originalUrl) { e.preventDefault(); // 阻止原链接的默认跳转行为 window.location.href = cleanedUrl; // 直接跳转到修正后的地址 } } });
这两种方案都不会触发原URL的请求,也就不会出现404页面的延迟跳转问题,前者适合静态页面,后者兼顾动态内容场景。
内容的提问来源于stack exchange,提问作者Freelancer
相关产品推荐
相关产品推荐

