近一段时间,借助每日新闻功能,百度收录了不少,并且很多是主题和评论均收录的那种,点击一个评论的连接,会发现进入页面之后自动跳转到了评论所在位置,这可不是我想要的,我需要的只是站内点击跳转至评论位置。
这里可以看到除了第一条收录是主题,其余3条的地址后面均含有... 即表明后面还有参数,也就是评论的id信息了。
前言
前面文章已经大概说明了思路,就是判断来路是哪里,如果不是空(直接输入URL)或者不是自己的域名,就直接return掉,不进行后续的跳转逻辑。
修改方案
之前一直都是修改对应的.min.js,现在不想这么修改了,或许后面我修改了.js之后再生成.min.js吧,先这样修改,后面再说。
把修改位置从.min.js 修改到.js需要做的一件事就是:修改js文件调用。
考虑到跳转评论功能在文章页,所以对应文件在post.js,那就修改这个文件的引用位置咯。
位置:/template/macro/tail.ftl
大概61行左右,修改成如下内容:
<#if type == 'post'>
<script src="${BASE_RES_URL}/source/js/post.js?v=${theme.version!}"></script>
</#if>
具体修改内容自己做对比参照吧。
然后就是修改post.js文件了,前面已经说明了思路,就直接修改吧。
文件位置:/source/js
大概376行搜索jumpToComment方法,在方法内的首行添加如下代码:
if (document.referrer !== undefined && document.referrer !== "" && document.referrer.indexOf("sammery.com") < 0){
return;
}
ps:这里改成自己的域名哦
完整修改完成的方法如下:
/*跳转到指定评论 */
async jumpToComment() {
if (document.referrer !== undefined && document.referrer !== "" && document.referrer.indexOf("sammery.com") < 0){
return;
}
if (
ThemeConfig.enable_clean_mode ||
!ThemeConfig.enable_comment ||
PageAttrs.metas.enable_comment === "false"
)
return;
const { cid: commentId = "", p: postId = "" } = Utils.getUrlParams();
if (!commentId) return;
await Utils.sleep(1000);
try {
const commentEl = document.getElementsByTagName("halo-comment");
if (!commentEl) return;
const el = $(commentEl[0].shadowRoot.getElementById("halo-comment")).find(
"#comment-" + commentId
);
if (!el) return;
const offsetTop = el.offset().top - 50;
// 滚动到指定位置
window.scrollTo({ top: offsetTop });
// 高亮该评论元素
const el_comment = el.find(".markdown-content").eq(0);
el_comment.addClass("blink");
await Utils.sleep(2000);
el_comment.removeClass("blink");
// 清除url参数
window.history.replaceState(
null,
null,
postId ? `?p=${postId}` : location.origin + location.pathname
);
tocbot.refresh();
} catch (error) {
console.info(error);
}
}
到这里就完成了,剩下的就上传服务器、刷新缓存、测试等自己玩吧。
特别强调
涉及到修改主题的内容,请及时做好备份,避免出现问题无法恢复的情况。
评论区