You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

定时检测Redirect.txt引发网页重定向循环问题求助

问题分析与修复方案

核心问题点

  1. 定时器调用错误:setInterval(read_redirect(), 5000) 里的 read_redirect() 会立即执行函数,且定时器实际接收的是函数返回值(undefined),导致定时器无法按预期每5秒执行一次。
  2. no-cors模式导致无法读取响应:使用mode: "no-cors"时,fetch返回不透明响应(opaque response),无法调用response.text()获取文件实际内容,最终data为空字符串,触发错误的重定向逻辑。
  3. 未处理空内容与初始值问题:usedLink初始为undefined,当textData为空时,textData != usedLink判断为真,会触发重定向到空地址(即当前页面),造成无限刷新。

修复后的代码

let usedLink = "";
// 修正定时器:传入函数引用,而非立即执行
const redirectTimer = setInterval(read_redirect, 5000);

function read_redirect(){
  const url = `${SERVER_HOST}/Redirect.txt`;
  // 移除no-cors模式,确保能读取响应内容
  fetch(url)
  .then(response => {
    // 先判断响应是否成功
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    return response.text();
  })
  .then(data => {
    const textData = data.trim(); // 去除首尾空白字符,避免换行/空格干扰
    console.log(`读取到内容: ${textData}`);
    
    // 增加非空判断,仅当内容有效且未使用过时才重定向
    if (textData !== "#" && textData !== "" && textData !== usedLink) {
        usedLink = textData;
        console.log(`即将重定向到: ${usedLink}`);
        // 重定向前清除定时器,避免新页面继续执行(同域名下)
        clearInterval(redirectTimer);
        location.href = textData;
    }
  })
  .catch(error => console.error("读取重定向文件失败:", error));
}

额外说明

  • 如果存在跨域问题,需要在托管Redirect.txt的服务器端配置CORS允许当前域名访问,而非使用no-cors模式。
  • 加入trim()是为了避免文件中的换行、空格等空白字符导致判断错误。
  • 重定向前清除定时器,防止同域名下的新页面继续执行定时任务。

内容的提问来源于stack exchange,提问作者rani ynon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:52:51