使用window.location刷新页面时IE11出现SCRIPT70权限拒绝错误
解决IE11中修改QueryString刷新页面时的"SCRIPT70: Permission denied"问题
这种IE11的玄学权限问题真的让人抓狂!我之前也碰到过类似的场景,结合你排除了iframe、跨域的前提,给你整理几个实际验证有效的解决方案和排查方向:
可能的根源
IE11对window.location的处理有不少特殊的缓存和安全校验逻辑,间歇性报错大概率是这几个情况:
- IE11偶尔会把同域下修改querystring的操作误判为不安全操作
- 页面还没完全加载完成就触发刷新,导致浏览器权限校验异常
window.location直接赋值的方式在IE11下存在竞态条件冲突
具体解决方法
1. 改用window.location.href赋值
IE11对window.location直接赋值的兼容性不如window.location.href,把你的刷新代码改成这样试试:
// 原来的代码可能是 window.location = newUrl; // 替换成 window.location.href = newUrl;
很多时候这个微小的改动就能搞定IE11的权限报错。
2. 给刷新操作加个小延迟
如果是页面未完全就绪时触发刷新导致的问题,可以给刷新加个100ms左右的延迟,让IE11有足够时间处理当前页面状态:
function handleFilterSelect(newUrl) { setTimeout(() => { window.location.href = newUrl; }, 100); }
另外也可以确保事件绑定在DOMContentLoaded之后执行,避免页面未加载完成就触发操作:
document.addEventListener('DOMContentLoaded', function() { // 绑定筛选器的点击事件 document.querySelector('.filter-option').addEventListener('click', handleFilterSelect); });
3. 用window.location.replace()替代直接赋值
replace()方法不会在历史记录中添加新条目,IE11对这个方法的权限校验更宽松:
window.location.replace(newUrl);
如果不需要保留当前页面的历史记录,这个方法值得优先尝试。
4. 手动构建完整绝对URL
有时候IE11对相对URL的解析会出问题,建议手动拼接完整的绝对URL:
function buildFilterUrl(queryParams) { const baseUrl = window.location.origin + window.location.pathname; // 注意:IE11支持URLSearchParams,但如果项目没加polyfill就用字符串拼接 const searchStr = new URLSearchParams(queryParams).toString(); return `${baseUrl}?${searchStr}`; }
5. 检查IE11的文档模式
有时候页面被强制切换到旧文档模式(比如IE7/8)也会导致这类问题:
- 按F12打开开发者工具,切换到「仿真」标签页
- 确认「文档模式」设置为「Edge」或「IE11」
- 取消勾选「在兼容性视图中显示Intranet站点」
总结
优先尝试前三个方案(换href、加延迟、用replace),这三个是解决这类IE11权限问题最常用的手段,大概率能搞定你的间歇性报错。如果还是不行,再排查文档模式和URL构建方式。
内容的提问来源于stack exchange,提问作者JezB
相关产品推荐
相关产品推荐

