您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically set the date range in AppsFlyer Cohort Overview page to the last 7 days via URL hash parameters only.
// ==UserScript== // @name AppsFlyer Cohort Date Range URL Setter // @namespace http://tampermonkey.net/ // @version 0.3 // @description Automatically set the date range in AppsFlyer Cohort Overview page to the last 7 days via URL hash parameters only. // @author YourName // @match https://hq1.appsflyer.com/cohort/overview* // @grant none // @license GPL-3.0 License // ==/UserScript== (function() { 'use strict'; // 函数:格式化日期为 "YYYY-MM-DD" 格式(例如 "2025-05-28") function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从 0 开始,需加 1 const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day}`; } // 函数:解析哈希部分的查询参数 function parseHashParams(hash) { const params = new URLSearchParams(); if (hash && hash.includes('/')) { const hashQuery = hash.split('/')[1] || ''; hashQuery.split('&').forEach(param => { const [key, value] = param.split('='); if (key && value) { params.set(key, value); } }); } return params; } // 函数:构建带有日期范围参数的新 URL(仅哈希部分) function buildNewUrl(startDate, endDate) { const currentUrl = window.location.href; const url = new URL(currentUrl); // 解析哈希部分的参数 const hash = url.hash || ''; const hashParams = parseHashParams(hash); if (hashParams.has('start') && hashParams.has('end')) { console.log('Hash already contains date range parameters, skipping.'); return null; } // 设置哈希部分的日期范围参数 hashParams.set('start', startDate); hashParams.set('end', endDate); // 构建新的哈希部分 let newHash = '#/'; const hashParamStrings = []; hashParams.forEach((value, key) => { hashParamStrings.push(`${key}=${value}`); }); newHash += hashParamStrings.join('&'); url.hash = newHash; // 移除查询字符串中的冗余参数(如 start, end, redirected) const queryParams = url.searchParams; queryParams.delete('start'); queryParams.delete('end'); queryParams.delete('redirected'); // 返回新 URL return url.toString(); } // 主函数:计算日期范围并重定向 function setDateRangeViaUrl() { // 计算最近 7 天的日期范围 const today = new Date(); const pastDate = new Date(today); pastDate.setDate(today.getDate() - 7); // 最近 7 天 const startFormatted = formatDate(pastDate); const endFormatted = formatDate(today); console.log(`Setting date range via URL hash: start=${startFormatted}, end=${endFormatted}`); // 构建新 URL const newUrl = buildNewUrl(startFormatted, endFormatted); if (newUrl) { console.log(`Redirecting to new URL with date range in hash only: ${newUrl}`); // 使用 replace 避免创建新的历史记录,防止后退时重复重定向 window.location.replace(newUrl); } else { console.log('No redirection needed.'); } } // 页面加载时执行 window.addEventListener('load', function() { console.log('Page loaded, checking URL for date range parameters...'); setDateRangeViaUrl(); }); // 额外的延迟执行,确保动态内容加载完成后再检查 setTimeout(setDateRangeViaUrl, 1000); // 1 秒延迟 })();