我有一个网站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";
硬编码并不理想,就像域名发生变化一样,我需要更新两次吗?
答案 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
标记。