面包屑链接

谢谢分享!现在它在没有警告信息的情况下正常工作了。

我遇到了另一个问题,我在下面提到了:

关于这个问题,我问了 ChatGPT,它(因为我不是开发者)回答说:

显示 ChatGPT 的消息

这个问题很可能源于你从 URL 中提取 topicId 的方式:

const topicId = url.split('/')[2];

如果你的 URL 包含更复杂的模式(例如带有空格、特殊字符或非标准 slug 的标题),这种简单的分割方法将无法可靠地获取正确的 topic ID。


为什么这会导致问题:

  • /t/3ple-2015-2019-title/12345 这样的 URL,数字 topic ID 位于末尾,但你的代码假设 topic ID 始终是第三个部分。
  • 如果你的 URL 结构不同,有时你会获取到 slug 或标题的一部分,而不是 ID。
  • 这会破坏你的 AJAX 请求 (/t/${topicId}.json),因为你可能会发送一个无效的 topic ID 或 slug,导致返回不正确或默认的类别信息(例如“General”)。

如何修复:

使用更可靠的方法从 URL 中提取 topic ID:

  1. 从 URL 的最后一个数字部分提取 topic ID。

Discourse 的 topic URL 通常看起来像 /t/{slug}/{id},例如:

/t/3ple-2015-2019-title/12345

这里的 12345 是 topic ID。


替换这个:

const topicId = url.split('/')[2];

用这个:

const segments = url.split('/').filter(Boolean);
const topicId = segments[segments.length - 1]; // 最后一个部分,预计是数字 ID

为了更安全,请验证 topicId 是一个数字:

if (!/^\\d+$/.test(topicId)) {
  console.error("从 URL 中提取的 topic ID 无效:", topicId);
  return; // 停止执行
}

总结:在 updateBreadcrumbs 中将你的代码片段更新为如下:

if (url.includes('/t/')) {
  const segments = url.split('/').filter(Boolean);
  const topicId = segments[segments.length - 1];

  if (!/^\\d+$/.test(topicId)) {
    console.error("从 URL 中提取的 topic ID 无效:", topicId);
    return;
  }

  // 然后继续使用 topicId 进行 AJAX 调用
}

这样,无论 URL 中的标题是否复杂或包含空格,你都能始终获取到数字 topic ID,从而修复面包屑类别和路径查找问题。

您能帮忙修复这个问题吗?
提前感谢!:raising_hands: