一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何在HTML中动态生成脚本URL以适配不同端口的静态资源服务

时间:2026-08-16 12:30:50 编辑:袖梨 来源:一聚教程网

本文介绍如何利用window.location对象动态构建跨端口静态资源(如JS文件)的加载路径,避免硬编码域名和端口,实现Apache(9443)与Tomcat(8443)混合部署下的灵活资源引用。

本文介绍如何利用window.location对象动态构建跨端口静态资源(如JS文件)的加载路径,避免硬编码域名和端口,实现Apache(9443)与Tomcat(8443)混合部署下的灵活资源引用。

在前后端分离或动静分离架构中,常将静态资源(JS、CSS、字体等)托管于独立Web服务器(如Apache),而动态应用运行于应用服务器(如Tomcat)。当两者监听不同HTTPS端口(如Apache:9443、Tomcat:8443)时,HTML页面若直接通过相对路径引用静态脚本(如<script src="../app-common/index.js">),会因同源策略失败——浏览器将尝试从当前Tomcat端口(8443)加载资源,而非Apache端口(9443)。

解决方案是在HTML中内联一段轻量JavaScript,动态生成指向正确端口的<script>标签,完全绕过静态HTML的局限性。核心逻辑基于window.location对象获取当前页面协议、主机名,并显式拼接目标端口与路径:

<!doctype html><html lang="tr" dir="ltr"><head><meta charset="utf-8"></head><body style="background-color:black;"><script>// 从当前页面URL提取基础信息const protocol = window.location.protocol.replace(/:$/, ''); // 如 "https"const hostname = window.location.hostname;// 如 "localhost"const staticPort = 9443;// Apache静态服务端口const staticPath = "app-common/index.js"; // 静态资源路径// 动态构造完整URLconst scriptSrc = `${protocol}://${hostname}:${staticPort}/${staticPath}`;// 创建并插入script标签const script = document.createElement('script');script.src = scriptSrc;script.type = 'text/javascript';document.head.appendChild(script); // 推荐插入head,避免阻塞body渲染</script></body></html>

关键优势

  1. 完全免硬编码:同一HTML可无缝部署于任意域名/端口的Tomcat实例;
  2. 端口可配置:只需修改staticPort变量,即可切换至其他静态服务端口(如测试环境用8080);
  3. 兼容HTTPS/HTTP:自动继承当前页面协议,规避混合内容警告;
  4. 可扩展性强:protocolhostnamestaticPort等变量可在后续加载的index.js中复用,用于动态引入其他资源(如CSS、字体、子模块JS)。

注意事项

  1. 确保Apache已正确配置CORS头(如Access-Control-Allow-Origin: *或指定域名),否则跨端口请求将被浏览器拦截;
  2. 若需支持IPv6地址或特殊主机名(含端口),建议对hostname做进一步校验;
  3. 生产环境应添加错误处理,例如监听script.onerror事件并降级提示;
  4. 避免在document.write()中动态写入script——它会阻塞解析且不推荐使用。

通过此方案,你无需修改任何后端配置或构建流程,仅用几行前端代码,即可实现静态资源服务的解耦与动态路由,显著提升多环境部署的灵活性与可维护性。

热门栏目