将js文件中的相对链接设置为来自文件源而不是域

时间:2013-05-20 06:41:01

标签: javascript html performance hyperlink cdn

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

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

在我的js文件中,位于http://www.eg.com/js/myscript.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"; 

硬编码并不理想,就像域名发生变化一样,我需要更新两次吗?

2 个答案:

答案 0 :(得分:1)

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

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

编辑虽然我还没有亲自使用过,但W3C似乎定义了base标签,可以用于您想要的内容

答案 1 :(得分:1)

这是预期的行为,因为它与当前网址相关。

如果你需要为你的链接/图像使用不同的域,那么我会添加一个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标记。