Skip to content

Commit

Permalink
修复连续多次触发 Turbo 驱动页面切换时, 未获取到正确的页面类型
Browse files Browse the repository at this point in the history
1. 连续多次触发 Turbo 驱动页面切换时, 存在当前页面未完全加载就直接导航到下个页面的情况时, 未获取到正确的页面类型; 原因可能是`window.location.href`及<head>中相关标记还未更新
2. 新增`pageConfig.triggerTarget`储存基于 Turbo 触发的下个页面的链接
3. 当`triggerTarget`存在时, `updatePageConfig 函数`优先使用它作为`detectPageType 函数`的输入URL
4. 通过`updatePageConfig 函数`重置`pageConfig.triggerTarget`, 与`pageConfig.pageChangeTrigger`类似
5. 此方法存在局限: 对于基于<head>中相关标记和<body>属性的页面判断规则不适用, 因为这些信息还未更新
  • Loading branch information
maboloshi committed Feb 16, 2025
1 parent 11c65f5 commit 10fa883
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions main.user.js
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,12 @@

// 更新页面设置
function updatePageConfig(currentPageChangeTrigger = pageConfig.pageChangeTrigger) {
const newType = detectPageType();
const newType = detectPageType(pageConfig.triggerTarget ? pageConfig.triggerTarget : window.location.href);
if (newType && newType !== pageConfig.currentPageType) {
pageConfig = buildPageConfig(newType);
} else {
pageConfig.pageChangeTrigger = false; // 重置 pageChangeTrigger
pageConfig.triggerTarget = false; // 重置 triggerTarget
}
console.log(`【Debug】${currentPageChangeTrigger}触发, 页面类型为 ${pageConfig.currentPageType}`);
}
Expand All @@ -103,6 +104,8 @@
currentPageType: pageType,
// 重置 pageChangeTrigger
pageChangeTrigger: false,
// 重置 triggerTarget
triggerTarget: false,
// 静态词库
staticDict: {
...I18N[CONFIG.LANG].public.static,
Expand Down Expand Up @@ -262,9 +265,9 @@
* detectPageType 函数:检测当前页面类型,基于URL、元素类名和meta信息。
* @returns {string|boolean} 页面的类型,如'repository'、'dashboard'等,如果无法确定类型,那么返回 false。
*/
function detectPageType() {
function detectPageType(url) {
url = new URL(url);
const { PAGE_MAP, SPECIAL_SITES } = CONFIG;
const url = new URL(window.location.href);
const { hostname, pathname } = url;

// 基础配置 ===============================================
Expand Down Expand Up @@ -626,8 +629,9 @@
}).observe(document.documentElement, { attributeFilter: ['lang'] });

// 监听 Turbo 获取响应之前事件
document.addEventListener('turbo:before-fetch-response', () => {
pageConfig.pageChangeTrigger = 'Tubo 驱动';
document.addEventListener('turbo:before-fetch-response', (event) => {
pageConfig.pageChangeTrigger = event.type;
pageConfig.triggerTarget = event.detail.fetchResponse.response.url;
});

// 监听浏览器 history 切换
Expand Down

0 comments on commit 10fa883

Please sign in to comment.