迁移后调试页面更改API

请帮我把这个从主题管理自定义区域移动到管理界面 JS 选项卡:

<script type="text/discourse-plugin" version="0.8.19">
api.onPageChange(() => {
	if ( window.location.href === "https://apple.com/123" ) {
		window.location.replace( "https://dell.com/234" );
	}
});
</script>

我正在查看这个示例:

export default apiInitializer((api) => {
  // 您的代码
});

并且它对 api.renderInOutlet 这样的代码效果很好,但是对于这个 onPageChange 我找不到更新的示例了。

如果你只是将这个:

api.onPageChange(() => {
	if ( window.location.href === "https://apple.com/123" ) {
		window.location.replace( "https://dell.com/234" );
	}
});

放入

会怎么样?

哈。你是在讽刺我吧?是的,我马上就试了。失败了。

以下是奏效的方法:

import { apiInitializer } from "discourse/lib/api";
export default apiInitializer("1.0", (api) => {
api.onPageChange((url) => {
// url 通常是路径
// 但在某些情况下它可能是一个完整的 URL,所以我们同时处理这两种情况。
const path = url?.startsWith("http") ? new URL(url).pathname : url;
if (path === "/123") {
      window.location.replace("https://dell.com/234");
}
});

抱歉。我误解了你的问题。

我很好奇——这些情况是什么?我以前从未在 URL 中见过 https,因为据我记忆,onPageChange 是针对 Ember 的路径的。

1 个赞

您好,作为一些整理工作,我已将此内容从原始发布说明主题移至新主题,以使该主题更整洁并提高可见性。祝您好运 :+1:

不过,我注意到在您后面的示例中,您不再检查 window.location.href。是这个问题吗?