Index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script type="text/javascript">
var path = '/Scripts/';
document.write('<base href="' + path + '"/>');
</script>
</head>
<body>
<h1>WELCOME</h1>
<script src="test.js"></script>
</body>
</html>
test.js
console.log("Message from external script");
输出
在这里您可以看到,首先它尝试从body标签加载脚本,然后再从脚本部分获取实际的基本href路径。
有什么办法可以解决这个错误?我的意思是在设置基本href之前不要加载正文脚本。
设置基本href后,它便成功执行。
谢谢。
答案 0 :(得分:1)
您看到的行为(某种程度上)是特定于浏览器的,并且与您使用document.write
动态设置基本href有关。
Chrome和Firefox在应用document.write之前尝试加载页面资源,然后更新这些url,并在设置页面<base>
之后再次尝试。 Safari似乎不这样做;它立即使用插入的基本href。我尚未测试其他浏览器。
(在所有浏览器中,<base>
标签,无论是静态的还是动态的,都需要在依赖于该文档的任何链接之前出现在文档中。)
除了多余的网络请求外,这似乎是无害的(请参阅下文),但是您可以通过使用静态<base>
标记而不是动态写入一个标记,或者在{ {1}}标签,而不是依赖<script>
。
(“无害”:我检查了在根级别和“ / Scripts”目录中都存在test.js的情况。动态插入“ / Scripts /”基本href确实没有 导致两个脚本都在Chrome中执行:成功发送了两个test.js文件的网络请求,但仅执行了“ / Scripts /”中的代码,因此浏览器制造商已经处理了这种情况。制造商!)
答案 1 :(得分:-1)
您可以使用此代码
<script src="./scripts/test.js" type="text/javascript"></script>