如何引用加载当前运行的javascript的脚本元素?
这是情况.我在页面中加载了一个"主"脚本,首先是在HEAD标记下.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript" src="scripts.js"></script>
Run Code Online (Sandbox Code Playgroud)
"scripts.js"中有一个脚本,它需要能够按需加载其他脚本.普通方法对我来说并不适用,因为我需要添加新脚本而不引用HEAD标记,因为HEAD元素还没有完成渲染:
document.getElementsByTagName('head')[0].appendChild(v);
Run Code Online (Sandbox Code Playgroud)
我想要做的是引用加载当前脚本的脚本元素,以便然后我可以将新的动态加载的脚本标记添加到DOM之后.
<script type="text/javascript" src="scripts.js"></script>
loaded by scripts.js--><script type="text/javascript" src="new_script1.js"></script>
loaded by scripts.js --><script type="text/javascript" src="new_script2.js"></script>
Run Code Online (Sandbox Code Playgroud) 是否有可能做到这一点:
myfile.js:
function foo() {
alert(<my-function-name>);
// pops-up "foo"
// or even better: "myfile.js : foo"
}
Run Code Online (Sandbox Code Playgroud)
我的堆栈中有Dojo和jQuery框架,所以如果其中任何一个更容易,它们就可用了.
我在文件中包含myscript.js,http://site1.com/index.html如下所示:
<script src=http://site2.com/myscript.js></script>
Run Code Online (Sandbox Code Playgroud)
在"myscript.js"中,我希望能够访问URL" http://site2.com/myscript.js ".我想要这样的东西:
function getScriptURL() {
// something here
return s
}
alert(getScriptURL());
Run Code Online (Sandbox Code Playgroud)
如果从上面提到的index.html调用,它会提醒" http://site2.com/myscript.js ".
是否有一种简单可靠的方法来确定当前正在执行的JavaScript文件的URL(在网页内)?
我唯一想到的是扫描DOM src以查找所有脚本属性以查找当前文件的引用方式,然后通过应用它来计算绝对URL document.location.任何人都有其他想法,是否有一些我完全忽略的超级简单方法?
更新:通过DOM访问的脚本元素已经具有src包含完整URL 的属性.我不知道它是多么普遍/标准,但是你可以使用getAttribute("src")哪个将返回[X] HTML中的任何原始属性值.
在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一样.这可能吗?
如果我有一个站点,example.com和该站点上的页面引用了subdomain.example.com/serveAd.js上的Javascript - 是否有一种方法可以在serveAd.js中知道自己的URL,或者来自哪个下载了?
(JS当然可以知道调用它的页面.我想知道JS是否了解它自己的来源.)
如何使用jQuery在javascript中获取当前脚本的路径
例如,我有,site.com/js/script.js并在此脚本中有一个代码:
$(document).ready(function() {
alert( ... this code ... );
}
Run Code Online (Sandbox Code Playgroud)
它应该返回带有"/js/script.js"消息的警告框.这个函数应该像__FILE__php中的魔术常量一样工作
那么,为什么我需要这个呢?
我想动态设置背景图片:
$("somediv").css("background-image", "url(" + $SCRIPT_PATH + "/images/img.png)");
Run Code Online (Sandbox Code Playgroud)
和images目录是文件/js附近的script.js目录
和js文件夹的名称可以动态设置,因此脚本和图像可以在/myprogect/javascript-files目录中
我试图在javascript中构建某种记录器功能.是否有任何API可供脚本获取自己的文件名?
javascript文件如何知道它位于何处?例如:
<script type="text/javascript" src="http://mysite.com/scripts/howdy.js"></script>
Run Code Online (Sandbox Code Playgroud)
如何howdy.js知道代码http://mysite.com/scripts/howdy.js?
编辑:澄清.我不能依赖于在DOM中搜索我的脚本标记,因为我需要在DOM准备好之前了解它.
如何找到被调用的JS文件的URL?
假设JS文件(它是库的一部分)和HTML文件(它是应用程序)位于不同的服务器上.要查找HTML文件的URL很简单.但是如何在JS文件本身中找出JS文件服务器的服务器名称和路径?(编辑:有一个加载器在同一目录结构中调用thsi库的其他JS文件)
最好是JQuery或纯JS解决方案.
编辑:
在我从你的答案和评论中学到了什么后,我决定将加载程序代码实际移动到第一台服务器上更加清晰,html仍然存在,这避免了问题.
有没有办法找到当前运行脚本的来源?我想根据脚本的加载位置添加不同的行为.
例如从下载:
http://localhost:8080/js/myscript.js
Run Code Online (Sandbox Code Playgroud)
VS
http://www.myhost.com/js/myscript.js
Run Code Online (Sandbox Code Playgroud)
我不是那个加载的人所以我无法在加载时添加一些信息,并且脚本是使用动态加载的$.getScript(),因此我无法查找该元素.