我很确定答案是否定的,但我想我还是会问.
如果我的站点引用了一个名为"whatever.js"的脚本,是否可以从该脚本中获取"whatever.js"?喜欢:
var scriptName = ???
if (typeof jQuery !== "function") {
throw new Error(
"jQuery's script needs to be loaded before " +
scriptName + ". Check the <script> tag order.");
}
Run Code Online (Sandbox Code Playgroud)
可能比依赖检查更值得麻烦,但是到底是怎么回事.
在CSS中,任何图像路径都相对于CSS文件位置.
f.ex如果我把CSS文件放入/media/css/mystyles.css并使用类似的东西
.background:url(../images/myimage.jpg);
Run Code Online (Sandbox Code Playgroud)
浏览器将查找/media/images/myimage.jpg有意义的图像.
是否有可能在JavaScript中做同样的事情?
F.ex如果我包含/media/js/myscript.js并将此代码放在那里:
var img = new Image();
img.src = '../images/myimage.jpg';
Run Code Online (Sandbox Code Playgroud)
找不到图像,因为浏览器使用HTML文件作为起点,而不是脚本位置.我希望能够使用脚本位置作为起点,就像CSS一样.这可能吗?
嘿所有,我一直在尝试将一个通用函数放在一起,检索网页上正在执行的JavaScript文件的绝对URL:
基本上你可以这样打电话:
getScriptName(function(url) {
console.log(url);
// http://www.example.com/myExternalJsFile.js
});
Run Code Online (Sandbox Code Playgroud)
在页面上的外部JavaScript文件中,然后可以对其执行某些操作(例如,查找<script>加载它的标记).
它几乎在我测试过的所有浏览器中都很棒(至少Firefox,Chrome,Safari,Opera v10和IE 8).
但是,它似乎在IE 6和7中失败.回调函数被执行,但检索到的名称是主HTML页面的URL,而不是JavaScript文件.继续该示例,getScriptName使用参数调用回调:http://www.example.com/index.html
所以我真正想问的是,是否有其他方法可以获取当前JavaScript文件的URL(可能是IE 6和7特定的hackery)?提前致谢!
编辑:此外,这不适用于所有情况,所以请不要推荐它:
var scripts = document.getElementsByTagName("script");
return scripts[scripts.length-1].src;
Run Code Online (Sandbox Code Playgroud)
我希望它适用于动态创建的脚本标记(可能不会放在页面的最后),也就是延迟加载.