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

ASP.NET C#中ERR_TOO_MANY_REDIRECTS错误求助

问题分析

原有功能逻辑:门户点击审批按钮打开弹窗,后端处理审批后通过ClientScript.RegisterStartupScript调用前端函数RedirectToCognos,实现弹窗关闭+父页面重定向。近期浏览器更新后触发ERR_TOO_MANY_REDIRECTS错误,即使仅关闭弹窗也会在后端脚本注册行报错。

可能的触发原因:

  • 现代浏览器隐私安全更新限制了window.opener的跨窗口操作权限
  • 目标重定向URL存在循环跳转逻辑
  • 后端脚本重复注册导致多次执行重定向操作
  • 浏览器隐私设置阻止了弹窗与父页面的交互
解决方案

1. 排查重定向URL的循环问题

  • 直接在浏览器访问redirectUrl,确认是否会自动跳转回原门户页面,若存在循环则修改后端生成的URL
  • 临时将redirectUrl替换为静态测试地址(如https://www.baidu.com),验证错误是否消失,以此确认是否为目标URL的问题

2. 适配浏览器安全限制,改用postMessage实现跨窗口通信

父页面添加消息监听

window.addEventListener('message', function(event) {
    // 验证消息来源域名,提升安全性
    if (event.origin === '弹窗页面的完整域名') {
        if (event.data.type === 'redirect') {
            window.location.href = event.data.url;
        }
    }
}, false);

修改弹窗的RedirectToCognos函数

function RedirectToCognos(url) {
    window.opener.postMessage(
        {type: 'redirect', url: url},
        '父页面的完整域名' // 或用'*'允许所有域名(不推荐,降低安全性)
    );
    window.close();
}

3. 避免后端脚本重复注册

检查并确保脚本仅注册一次,防止重复执行导致多次重定向:

if (!ClientScript.IsStartupScriptRegistered(this.GetType(), "closewindow"))
{
    ClientScript.RegisterStartupScript(this.GetType(), "closewindow", $"RedirectToCognos('{redirectUrl}');", true);
}

若使用ASP.NET AJAX环境,改用ScriptManager确保脚本执行时机正确:

ScriptManager.RegisterStartupScript(this, this.GetType(), "closewindow", $"RedirectToCognos('{redirectUrl}');", true);

4. 检查浏览器隐私设置

指导用户确认浏览器设置允许弹窗与父页面交互:

以Chrome为例:设置 → 隐私和安全 → 网站设置 → 弹出式窗口和重定向 → 确保门户域名在允许列表中;同时检查隐私沙盒相关设置,避免其限制跨窗口通信

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:34:52