【问题标题】:Set Relative link in a js file to come from files source rather than domain将 js 文件中的相对链接设置为来自文件源而不是域
【发布时间】:2025-12-03 09:20:20
【问题描述】:

我有一个网站http://www.example.com

我提供来自不同域的静态文件。 例如http://www.eg.com

在我位于http://www.eg.com/js/myscript.js的js文件中

我有一个图像变量。

var myvar = "images/example.gif";

我以为图片链接是http://www.eg.com/images/example.gif,但看起来(当我查看控制台时)它抓取了域名,所以它得到了http://www.example.com/images/example.gif

这是预期的行为吗?

除了将变量硬编码为之外,还有其他方法吗

var myvar = "http://www.eg.com/images/example.gif"; 

硬编码不是很理想,好像域发生了变化我需要更新两次?

【问题讨论】:

    标签: javascript html performance hyperlink cdn


    【解决方案1】:

    这是预期行为,因为它与当前 URL 相关。

    如果您需要为链接/图像使用不同的域,那么我会添加一个 var 来保存主机名并在您的 JS 文件中引用它,因此如果您移动文件,您只需在一个地方更改它。

    所以:

    var domain = 'http://eg.com/';
    var myvar = domain + "images/example.gif";
    

    或者,如果您不想对域进行硬编码,则可以从 JS 源属性中提取它:

    HTML:

    <script type="text/javascript" id="myjs" src="http://eg.com/myscript.js"></script>
    

    在 myscript.js 中:

    var myjs = document.getElementById('myjs');
    var domain = myjs.getAttribute('src').replace('myscript.js','');
    var myvar = domain + "images/example.gif";
    

    您也可以在标题but there are some gotcha's 中使用base 标签。

    【讨论】:

    • 谢谢,我过去在某些情况下使用过基本标签。对于未来,我也会记住您的其他建议。
    【解决方案2】:

    所有相对链接都是相对于您在浏览器地址栏中看到的内容。

    唯一的例外是在 CSS 中加载的图像(例如 background-images),在这种情况下,路径是相对于 CSS 文件的。

    编辑:虽然我没有亲自使用过,但 W3C 似乎定义了 base 标签,它可以满足您的需求

    【讨论】:

    • 谢谢,我以为我以前在某个地方看到过它。它必须在一个 css 文件中。
    最近更新 更多