有没有办法在文档准备好后获取javascript文件的文件信息(文件名,路径),而不知道有多少脚本或它们的加载顺序?
即
<html>
<head>
<script src="http://www.example.ex/js/js1.js" type="text/javascript">
<script src="http://www.example.ex/javascript/js2.js" type="text/javascript">
<script src="http://www.example.ex/scripts/js3.js" type="text/javascript">
<...>
文件js2.js的含义如下:
$(document).ready(function() {
// get the filename "js2.js"
}
我能做到
var scripts = document.getElementsByTagName("script"),
scriptLocation = scripts[1].src;
但索引“[1]”必须是动态的,因为我不知道加载脚本的顺序。
答案 0 :(得分:3)
也许完整的答案比我的评论更有帮助。如果您将此代码放入js2.js
,您就会得到您想要的内容。关键是在一段代码中捕获scriptLocation
,该代码与加载文件同步运行,这意味着回调中不。
var scripts = document.getElementsByTagName("script"),
scriptLocation = scripts[scripts.length - 1].src;
$(document).ready(function() {
// logs the full path corresponding to "js2.js"
console.log(scriptLocation);
}
答案 1 :(得分:2)
从Error.stack
获取行号和文件名,例如:
console.log((new Error).stack.split("\n"));
请参阅Error.stack
有关浏览器兼容性,请参阅previous SO question
答案 2 :(得分:1)
不完全确定你所追求的是什么,但如果你想引用DOM中加载的所有脚本,你只需要这样做:
var scripts = document.getElementsByTagName("script");
for(var i = 0; i < scripts.length; i++){
var scriptLocation = scripts[i].src;
}
答案 3 :(得分:0)
var scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
if (scripts[i].src.match(/<desired filename>/) {
scriptLocation = scripts[i];
}
}
如果我正确地理解了你的问题,那应该可以解决问题。
答案 4 :(得分:0)
var scriptName = [].slice.call(document.getElementsByTagName('script')).pop().getAttribute('src');
document.getElementsByTagName('script')
返回页面脚本HTMLCollection
。最后一个元素是当前脚本。 HTMLCollection
没有获取最后的方法,但在[].slice.call
转换为Array
之后,我们可以调用pop
来执行此操作。最后getAttribute
返回所需的文件名。
相同的代码可用于将参数传递给js-script
<script src="file.js" args="arg1;arg2">
...
var args = [].slice.call(document.getElementsByTagName('script')).pop().getAttribute('args').split(';');