api.onPageChange 在无限滚动时不起作用

我尝试使用下面的代码修改标签链接,它在刷新页面或跳转到新页面时似乎有效,但在向下滚动页面(触发无限滚动加载新内容)时无效:

<script type="text/discourse-plugin" version="0.8">
	api.onPageChange(() => {
		var tags = document.getElementsByClassName("discourse-tag");
		for (i = 0; i < tags.length; i++) {
			var tag = tags[i];
			var url = tag.href;
			var newUrl = "https://site.com" + url;
			tag.href = newUrl;
		}
	});
</script>

我是否需要使用除 api.onPageChange 之外的方法,或者在 api.onPageChange 的基础上添加其他方法?

1 个赞

不行,那行不通。它只在路由变更时触发。你需要考虑直接覆盖渲染这些标签的代码,而不是使用 DOM 选择。

9 个赞

谢谢 Robert,我本来希望简单的方案就能搞定!:see_no_evil:

我已经很久没读插件指南了,但凭记忆,步骤大概是这样的?

  • rails g plugin NAME
  • 找到你想要修改的文件
  • 将其复制到插件中的相同目录
  • 进行你的修改

但这个方法在我这里行不通。

直接编辑这个文件(第 29 行):discourse/app/assets/javascripts/discourse/app/lib/render-tag.js at bbe5d8d5cf1220165842985c0e2cd4c454d501cd · discourse/discourse · GitHub 可以达到预期效果,但当我把文件复制到以下位置时却没有任何影响:plugins/my-plugin/app/assets/javascripts/discourse/app/lib/render-tag.js

有什么想法吗?我是不是哪里做错了?还是说自从我看指南以来有什么变化?(不知为何,我以为只需覆盖文件就能修改这类小改动)。

1 个赞

你不需要插件,这是客户端操作。请使用主题组件。

7 个赞

谢谢!有趣的是,我昨晚开始自定义 https://meta.discourse.org/t/tag-icons-component/109757,并且成功让它运行起来了!:smiley:

不过出于好奇,我上面描述的那种插件文件覆盖方法按理说也应该能行吧?(如果可以的话,有什么线索是我哪里做错了吗?)

1 个赞