You need to enable JavaScript to run this app. 为什么我的JS脚本在耐克官网运行时无限循环打开标签页无法终止?
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的JS脚本在耐克官网运行时无限循环打开标签页无法终止?

问题根源

  • 数组索引越界触发异常,导致clearInterval无法执行:你获取的a标签数组长度为4时,有效索引范围是0~3,循环判断条件写的是i<dispo+1即i<5,i会走到4,此时访问a[4].href会抛出未定义错误,代码直接终止运行,后续清除定时器的逻辑永远不会触发,定时器会每2秒重复执行一次,持续打开新标签。
  • 变量未声明导致全局污染:dispo和循环变量i都没有用var/let/const声明,会自动挂载到全局window对象,取值容易出现预期外的异常。
  • 缺少节点存在性校验:如果页面结构变动,.grid的第6个元素(索引5)不存在,或者该元素下没有a标签,都会提前触发异常,同样会导致定时器无法清除。

修复后的代码

var checkInterval = setInterval(() => {
    // 无目标文本直接跳出本次执行
    if (!document.documentElement.innerText.includes('Paris')) return
    try {
        const gridItem = document.querySelectorAll('.grid')[5]
        if (!gridItem) throw new Error('目标grid节点不存在')
        const linkList = gridItem.querySelectorAll('a')
        const dispo = linkList.length
        // 循环条件改为小于dispo,避免索引越界
        for (let i = 0; i < dispo; i += 2) {
            const targetHref = linkList[i]?.href
            if (targetHref) window.open(targetHref, "_blank")
        }
    } catch (err) {
        console.error('执行出错:', err)
    } finally {
        // 无论执行成功还是失败都清除定时器,避免无限运行
        clearInterval(checkInterval)
    }
}, 2000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 04:54:04