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

如何根据年份动态切换script的src?修改后未生效问题求助

问题原因与解决方法

你遇到的问题核心是:已经被浏览器解析过的script元素,仅修改其src属性不会触发新脚本的加载与执行。浏览器在首次处理script标签时就完成了资源请求和执行逻辑,之后修改src只是改变了DOM属性,不会重新发起请求。

解决方案:替换script元素而非修改src

正确的做法是移除旧的script元素,动态创建新的script标签并设置对应src,再插入到DOM中。这样浏览器会重新加载并执行新的脚本。

修改后的代码如下:

HTML(保持不变)

<script id="element1" src="#"></script>
<script src="js/element-by-year.js"></script>

修改后的JS代码

var yearlyContainer = document.getElementById("element1").parentNode;
var yearlyScript = document.getElementById("element1");

var refreshStatus = () => {
  const today = new Date();
  const year = today.getFullYear();
  let targetSrc = "";

  // 确定对应年份的脚本路径
  if (year === 2022) {
    targetSrc = "js/change1.js";
  } else if (year === 2023) {
    targetSrc = "js/change2.js";
  }

  if (targetSrc && targetSrc !== yearlyScript.src) {
    // 移除旧的script元素
    yearlyScript.remove();
    // 创建新的script标签
    const newScript = document.createElement("script");
    newScript.id = "element1";
    newScript.src = targetSrc;
    // 插入到原来的位置
    yearlyContainer.appendChild(newScript);
    // 更新引用为新的script元素
    yearlyScript = newScript;
  }
}

// 页面加载时执行一次
refreshStatus();

// 每天检查一次
setInterval(refreshStatus, 86400000);

额外优化点

  • 使用else if替代多个独立if,避免不必要的判断
  • 增加判断:只有当目标src和当前src不同时才替换,避免重复加载
  • 保存父节点引用,确保新脚本插入到正确位置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:06:21