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

TypeScript动态拼接URL调用window.open触发ESLint报错如何解决

问题背景

TypeScript开发过程中实现页面跳转逻辑时,编写代码如下:

window.open(`https://somelink/certificate/${regNumber}?registrationNumber=${type}`);

代码中regNumber、type均为业务侧动态传入的参数。执行ESLint代码检查时,抛出如下错误:

Found fs.open with non literal argument at index 0 security/detect-non-literal-fs-filename

已知该检测规则的设计目的是防范路径遍历安全漏洞,但当前调用的是浏览器环境的window.open方法做页面跳转,不属于Node.js环境下的文件系统操作场景,需要找到可落地的合规处理方式。
报错截图如下:
ESLint报错截图

可行解决思路
  • 首先明确报错原因:该报错属于eslint-plugin-security插件的规则误判。security/detect-non-literal-fs-filename规则默认会对所有名称包含open的方法做静态检测,没有区分浏览器端window.open和Node端fs.open的场景差异,才会在前端跳转代码处抛出fs相关的检测错误。
  • 单行规则豁免:如果确认当前代码逻辑无安全风险,可直接在代码行上方添加ESLint注释,跳过该行的对应规则检测,这是此类明确误报场景下最常用的处理方式:
    // eslint-disable-next-line security/detect-non-literal-fs-filename
    window.open(`https://somelink/certificate/${regNumber}?registrationNumber=${type}`);
    
  • 代码写法加固:如果不想直接关闭规则,可调整URL构造方式,通过原生URL对象生成跳转地址,同时提前对动态参数做格式校验,既可以绕过规则的静态检测,也能进一步规避参数注入风险:
    // 先校验动态参数格式,根据实际业务规则调整校验逻辑
    if (!/^[A-Za-z0-9]+$/.test(regNumber) || !['normal', 'special'].includes(type)) {
      throw new Error('跳转参数非法');
    }
    // 用URL对象构造地址,避免直接拼接字符串
    const jumpUrl = new URL(`https://somelink/certificate/${regNumber}`);
    jumpUrl.searchParams.append('registrationNumber', type);
    window.open(jumpUrl.toString());
    
  • 全局规则调整:如果项目中存在大量同类前端跳转场景,可在ESLint配置文件中针对前端代码目录关闭该规则,或调整规则的检测匹配范围,排除window.open这类非文件系统操作的方法检测。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:36:22