标签搜索

目 录CONTENT

文章目录

修改当前主题,解决当搜索引擎过来的带评论ID参数时跳转评论问题

沙漠渔
2022-06-23 11:28:34 / 8 评论 / 2 点赞 / 621 阅读 / 2,125 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-06-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

近一段时间,借助每日新闻功能,百度收录了不少,并且很多是主题和评论均收录的那种,点击一个评论的连接,会发现进入页面之后自动跳转到了评论所在位置,这可不是我想要的,我需要的只是站内点击跳转至评论位置。

QQ拼音截图20220623112810.png
这里可以看到除了第一条收录是主题,其余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);
		}
	}

到这里就完成了,剩下的就上传服务器、刷新缓存、测试等自己玩吧。

特别强调

涉及到修改主题的内容,请及时做好备份,避免出现问题无法恢复的情况。

2
广告 广告

评论区