如何修改JS代码让a标签跳转至完整外部地址而非拼接?
问题原因与解决方案
这个问题是因为你设置的href值是不带协议的相对URL,浏览器会自动把它拼接到当前页面的域名后面,当成相对路径处理。要实现直接跳转完整地址,必须让href的值是带协议的绝对URL(比如https://www.newsite.com)。
具体修改方式
方式1:前端JS补全协议
如果后端返回的jsonstring['localip']只包含域名(比如www.newsite.com),可以在前端判断并补全协议:
const targetAddr = jsonstring['localip']; // 检查地址是否已包含http/https协议,没有则添加https前缀 const fullUrl = targetAddr.startsWith('http') ? targetAddr : `https://${targetAddr}`; document.getElementById('st_ip' + dev).href = fullUrl;
方式2:确保后端返回完整地址
如果后端可以控制localip的输出,直接让它返回带协议的完整地址(比如https://www.newsite.com),这样原JS代码不需要修改就能正常工作。
额外提示
如果你的场景中需要兼容http和https,也可以根据当前页面的协议动态拼接:
const targetAddr = jsonstring['localip']; const fullUrl = targetAddr.startsWith('http') ? targetAddr : `${window.location.protocol}//${targetAddr}`; document.getElementById('st_ip' + dev).href = fullUrl;
这种方式会自动使用当前页面的协议(http或https)来拼接目标地址。
内容的提问来源于stack exchange,提问作者NicolaIta
相关产品推荐
相关产品推荐

