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

iOS Safari中classList.forEach无法运行的问题求助

解决iOS Safari中classList.forEach无法运行的问题

嘿,这个问题我太熟悉了!旧版本的iOS Safari(比如iOS 9及更早)里,classList所属的DOMTokenList接口并没有实现forEach方法,这就是你碰到报错的根源。给你几个兼容性拉满的解决办法:

方案1:将classList转换为数组后使用forEach

把DOMTokenList转换成数组,就能用数组原生的forEach方法了,兼容性也很好。你可以用Array.prototype.slice.call()(支持所有旧版Safari)或者更现代的Array.from()(iOS 9+支持):

修改后的核心代码:

// 兼容性最好的转换方式(适配所有老旧Safari版本)
const bodyClasses = Array.prototype.slice.call(document.body.classList);
bodyClasses.forEach(function(e){
  let pageName = e;
  if(Routes.hasOwnProperty(pageName)){
    new Routes[pageName]();
  }
});

或者用更简洁的现代写法(iOS 9+支持):

Array.from(document.body.classList).forEach(e => {
  if(Routes.hasOwnProperty(e)){
    new Routes[e]();
  }
});

方案2:使用传统for循环遍历

如果要兼容极端老旧的iOS版本,传统for循环是最稳妥的选择,直接通过索引访问classList的每一项:

修改后的核心代码:

const bodyClassList = document.body.classList;
for(let i = 0; i < bodyClassList.length; i++){
  const pageName = bodyClassList.item(i);
  if(Routes.hasOwnProperty(pageName)){
    new Routes[pageName]();
  }
}

额外优化:简化body元素获取

建议用document.body代替document.getElementsByTagName("body")[0],代码更简洁高效,两者效果完全一致。

完整修改后的代码:

import Header from './Components/Header'; 
import Shelf from './Components/Shelf'; 
import Home from './Pages/Home'; 
import Category from './Pages/Category'; 
import Product from './Pages/Product'; 
import NossasLojas from './Pages/NossasLojas'; 
import Checkout from './Pages/Checkout'; 

const Routes = { 
  "home": Home, 
  "single-product": Product, 
  "page-template-nossas-lojas": NossasLojas, 
  "archive": Category, 
  "woocommerce-cart": Checkout 
}; 

export default class Pages { 
  constructor(){ 
    new Header(); 
    new Shelf(); 
    try { 
      // 这里采用方案1的兼容性写法
      const bodyClasses = Array.prototype.slice.call(document.body.classList);
      bodyClasses.forEach(function(e){ 
        let pageName = e; 
        if(Routes.hasOwnProperty(pageName)){ 
          new Routes[pageName](); 
        } 
      }); 
    } catch (err) { 
      alert(err); 
    } 
  } 
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:24:31