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

VueJS+Laravel拍卖应用Chrome运行正常但Safari无响应问题求助

问题根因定位

你遇到的问题90%以上是Safari的Date构造函数兼容性问题导致的:Chrome支持YYYY-MM-DD HH:MM:SS这类带空格的时间字符串解析,但Safari无法识别该格式,调用new Date(不支持的格式)会返回Invalid Date,调用getTime()得到的结果是NaN,导致Timer组件中所有时间大小判断逻辑都不会触发,父组件的状态(拍卖未开始/进行中/已结束)不会更新,整个页面看起来无响应,且不会抛出明显的JS错误,完全符合你描述的现象。

验证方法

在Timer.vue的mounted钩子中添加调试日志,确认解析结果:

mounted() {
  console.log('原始starttime:', this.starttime)
  this.start = new Date(this.starttime).getTime();
  console.log('解析后start:', this.start)
  console.log('原始endtime:', this.endtime)
  this.end = new Date(this.endtime).getTime();
  console.log('解析后end:', this.end)
  // 保留原有逻辑
}

在Safari控制台查看解析后的start、end值,如果为NaN即可确认是该问题。

解决方案

最优方案(推荐)

后端传递starting、ending两个时间参数时,直接输出毫秒级Unix时间戳,前端不需要做日期解析,直接赋值给this.start和this.end即可,完全避免跨浏览器日期解析差异。

前端兼容方案

如果不方便修改后端输出,对时间字符串做格式转换后再解析:

// 把空格替换为T,适配Safari解析规则
this.start = new Date(this.starttime.replace(/ /g, 'T')).getTime();
this.end = new Date(this.endtime.replace(/ /g, 'T')).getTime();

如果时间带时区,可根据实际情况补全时区标识,比如国内时区可以在字符串末尾加+08:00。

其他潜在问题排查

  1. 模板内联JSON兼容性问题:当前你在DealerAuction的Timer组件上直接把JSON字符串写在trans属性里,不同浏览器对模板内换行的字符串解析可能存在差异,建议把trans对象提到父组件的data中直接传递对象,省去JSON.parse步骤:
    在DealerAuction的data中添加:
    transObj: {
      "day":"Day",
      "hours":"Hours",
      "minutes":"Minuts",
      "seconds":"Seconds",
      "expired":"Event has been expired.",
      "running":"Till the end of event.",
      "upcoming":"Till start of event.",
      "status": {
        "expired":"Expired",
        "running":"Running",
        "upcoming":"Future"
      }
    }
    
    组件调用改成<Timer ... :trans="transObj"></Timer>,同时删除Timer中created钩子的this.wordString = JSON.parse(this.trans),直接赋值this.wordString = this.trans即可。
  2. 检查Babel配置是否覆盖了目标Safari版本,避免ES6+语法未转义导致的静默失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:24:08