如何在Blogger帖子内容中引用当前帖子的URL
解决Blogger帖子目录锚点链接在首页失效的问题
方案一:用JavaScript批量改写目录链接
这是最直接的解决方法,不需要修改你生成帖子的Python代码,只需要在Blogger主题里添加一段脚本:
步骤1:添加脚本到主题
进入Blogger后台的「主题」→「编辑HTML」,找到</body>标签,在它前面插入以下代码:
document.addEventListener('DOMContentLoaded', function() { // 从页面默认的canonical标签提取帖子详情页URL const canonicalLink = document.querySelector('link[rel="canonical"]'); if (!canonicalLink) return; const postUrl = canonicalLink.href.replace(/#.*$/, ''); // 移除URL中可能存在的锚点部分 // 筛选帖子里所有指向内部锚点的链接(若目录有专属类名,比如.post-toc,可改成.post-toc a[href^="#"]) const tocLinks = document.querySelectorAll('.post-body a[href^="#"]'); tocLinks.forEach(link => { // 仅处理纯锚点链接,避免重复添加URL前缀 if (link.getAttribute('href').startsWith('#')) { link.href = postUrl + link.getAttribute('href'); } }); });
说明
- 脚本会在页面加载完成后,自动给所有以
#开头的链接加上帖子详情页URL前缀,确保在首页点击目录链接时,能跳转到详情页的对应锚点位置。 - 用
canonical标签获取URL是因为无论在首页还是详情页,该标签指向的都是帖子的最终详情页地址,跳转逻辑更稳定。 - 若你的目录有单独容器(比如
<div class="post-toc">),修改选择器为.post-toc a[href^="#"]可以精准仅处理目录链接,不影响帖子内其他正常链接。
方案二:模板层面注入帖子URL到内容容器
如果后续有其他自定义需求需要在帖子内容中调用URL,可以修改主题模板:
- 在主题编辑器中找到渲染帖子内容的代码,通常是
<data:post.body/>。 - 将其替换为以下代码,给内容包裹一个带有帖子URL数据属性的容器:
<div class="post-body" data-post-url="<data:post.url/>"> <data:post.body/> </div>
- 之后可通过
document.querySelector('.post-body').dataset.postUrl在JS中获取帖子URL,逻辑和方案一一致,仅URL获取方式不同。
额外提示
- 确保帖子内的锚点ID(如
item4)在所有帖子中唯一,避免跳转混乱。 - 在帖子详情页时,脚本生成的
帖子URL#锚点ID链接仍会正常触发页面内跳转,不影响原有功能。
内容的提问来源于stack exchange,提问作者jbailin
相关产品推荐
相关产品推荐

