gar1t
(Garrett)
1
这个问题涉及 API 的底层细节。
我正在使用一个优秀的 Matomo 主题组件的分支版本。该组件允许你通过 Matomo 跟踪页面浏览量。我的分支旨在解决一些问题,其核心逻辑与原版基本一致。以下描述的行为在原始组件中同样存在。
该组件使用 onPageChange 回调来配置 Matomo API 或相关功能。
我遇到的问题是,有时 onPageChange 回调会在页面标题生成之前被触发。这种行为不一致:有时标题已完全生成,有时则没有。
结果是,Matomo 的日志历史记录中混合了完整生成的页面标题和不完整的标题。
查看 Discourse 源代码,该回调在 page:changed 触发器之前被调用:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/app/lib/page-tracker.js#L31
乍看之下这应该能正常工作——在 onPageChange 被调用时,标题理应已更新。但事实并非如此,至少并不总是如此。
还有一个可能相关的问题:onPageChange 有时会被调用两次。这是我采用的变通方案(也是我创建分支的原因):
当 onPageChange 对同一次页面浏览被调用两次时,其中一次调用提供的 url 参数与当前窗口位置不同。我会检查这一点并提前退出。
(请注意,我通过 onAppEvent 而非 onPageChange 来处理 page:changed 事件,但在两种情况下我都观察到了相同的行为。)
simon
2
我测试了以下代码,看看标题是否会被正确设置:
<script type="text/discourse-plugin" version="0.2">
api.onPageChange( (url, title) => {
console.log('url', url);
console.log('title', title)
})
</script>
我的发现是:如果我创建一个新主题,在创建主题后立即调用的 api.onPageChange 中,该主题的标题并未被设置。在这种情况下,系统会改用网站标题。您遇到的情况是否也是如此?如果您完全没有看到标题,请确保您已填写了“标题”和“网站描述”这两个网站设置项。这些设置位于您网站设置页面的“必填”选项卡中。
guildai
(Garrett)
3
谢谢你对此进行跟进,Simon。但我看到的情况并非如此。我录制了一段屏幕视频,稍后会通过带外方式将链接发给你,同时附上相关主题组件源码的参考。
核心问题是:在已加载的应用中首次调用某个主题时,标题并未被渲染。在入口页面(即首次加载应用时),我在 onPageChanged 中能看到标题;而在第一页之后的任何页面,标题也能正常显示。希望这段录屏能让情况更清晰 