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
相关产品推荐
相关产品推荐

