在同一浏览器标签页中打开内部链接

我们许多人将 Discourse 部署在子域名下,同时在根域名上搭建网站,例如 meta.discourse.orgdiscourse.org。然而,当全局设置“默认在新标签页中打开其他外部链接”设为“默认在新标签页中打开外部链接”时,系统会认为所有非论坛链接都是外部的链接。请问是否有办法添加域名,使这些链接在同一浏览器标签页中打开?(如果目前不支持,能否请添加此选项?)

目前存在一个“允许的内部主机”设置,其描述为:“Discourse 可安全抓取以进行一键嵌入及其他用途的内部主机列表”。或许可以直接利用该设置,将在此处添加的域名配置为在同一标签页中打开?

1 个赞

这听起来是一个非常具体的需求,因此您最好的选择是通过主题或插件来实现。

2 个赞

说实话,Rafael,我希望在我运行的每个 Discourse 实例上都这样做。我想不出有什么理由不这么做——如果网站属于同一个内部域名或父域名,你可能更希望链接在同一窗口中打开。我在想,是否值得为此发起一个投票,以了解 Discourse 用户更倾向于哪种方式?我觉得结果可能会让你感到惊讶:blush:

Rafael,这样做最好的方法是什么?

我尝试使用:

<script type="text/discourse-plugin" version="0.8.42">
	api.decorateCookedElement(
	  element => {
	    const tags = element.querySelectorAll('.hashtag');

	    tags.forEach(function(tag) {
				if (tag.hasAttribute('href')) {
					if (tag.href.includes("site.com/tag/")) {
						tag.href = tag.href.replace("site.com/tag/", "newsite.com/")
						tag.setAttribute("target", "_self");
					}
				}
	    });
    },
	  {
	    onlyStream: true
	  }
	);
</script>

虽然:

tag.setAttribute("target", "_self");

成功设置了该属性,但似乎没有任何效果,链接仍然像往常一样在新标签页中打开。

我猜我需要使用 api.decorateCookedElement 以外的其他方法?