You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

能否排除指定脚本在location.reload()手动重载时的执行?

如何在location.reload()重载时排除指定脚本执行

这个问题问得很到位——因为location.reload()本质上就是让浏览器重新请求并渲染整个页面,默认情况下所有脚本都会重新执行,所以得靠状态标记来区分「正常加载」和「手动重载」这两种场景。下面给你两种实用的解决方案:

方案1:用sessionStorage做临时标记(推荐)

sessionStorage是会话级的存储,页面关闭后就会自动清除,非常适合用来存这种一次性的状态标记。

步骤1:在调用reload()前设置标记

在你手动触发location.reload()的代码里,先给sessionStorage加一个标记:

// 标记当前是手动重载,需要跳过指定脚本
sessionStorage.setItem('skipTargetScript', 'true');
// 执行重载
location.reload();

步骤2:在目标脚本中检查标记

在你想要排除的脚本开头,先检查这个标记——如果是重载触发的加载,就跳过核心代码,同时记得清除标记(避免影响下一次正常加载):

// 检查是否是重载触发的加载
if (sessionStorage.getItem('skipTargetScript') !== 'true') {
  // 这里放你原本要执行的脚本逻辑
  console.log('脚本正常执行(非重载场景)');
} else {
  // 清除标记,确保下次正常加载时脚本能运行
  sessionStorage.removeItem('skipTargetScript');
}

方案2:动态加载脚本(适合外部引入的脚本)

如果你的目标脚本是通过<script>标签引入的外部文件,可以改成动态创建脚本标签的方式,根据标记决定是否加载:

<script>
  // 先检查标记
  if (sessionStorage.getItem('skipTargetScript') !== 'true') {
    // 正常加载场景:动态创建脚本标签并引入
    const targetScript = document.createElement('script');
    targetScript.src = '/path/to/your-target-script.js';
    targetScript.async = false; // 保持原本的加载顺序,按需调整
    document.body.appendChild(targetScript);
  } else {
    // 重载场景:清除标记
    sessionStorage.removeItem('skipTargetScript');
  }
</script>

注意事项

  • 标记一定要在location.reload()之前设置,不然重载后页面重新初始化,标记就来不及生效了。
  • 如果用location.reload(true)强制从服务器拉取资源,这个方案依然有效——sessionStorage不会因为强制刷新而丢失(除非浏览器有特殊设置)。
  • 如果你有多个触发重载的地方,记得每个地方都要加上设置标记的代码。

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

火山引擎 最新活动