Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取.js文件本身的uri_Javascript - Fatal编程技术网

Javascript 如何获取.js文件本身的uri

Javascript 如何获取.js文件本身的uri,javascript,Javascript,JavaScript中是否有一种方法,可以通过该方法找到执行脚本的路径/uri 例如: index.html包含一个JavaScript文件stuff.js,由于stuff.js文件依赖于/commons.js,因此它也希望将其包含在页面中。问题是stuff.js只从自身知道/commons.js的相对路径,不知道完整的url/路径 index.html包括stuff.js文件作为和stuff.js文件要读取键的值。怎么做 更新:是否有标准的方法来执行此操作?甚至在征兵状态下?(我可以从答案中看

JavaScript中是否有一种方法,可以通过该方法找到执行脚本的路径/uri

例如:

  • index.html
    包含一个JavaScript文件
    stuff.js
    ,由于
    stuff.js
    文件依赖于
    /commons.js
    ,因此它也希望将其包含在页面中。问题是
    stuff.js
    只从自身知道
    /commons.js
    的相对路径,不知道完整的url/路径

  • index.html
    包括
    stuff.js
    文件作为
    stuff.js
    文件要读取
    键的值。怎么做


  • 更新:是否有标准的方法来执行此操作?甚至在征兵状态下?(我可以从答案中看出,答案是“否”。感谢所有人的回答)。

    这将为您提供当前脚本的完整路径(如果根据请求加载,则可能无法工作等)


    如果您的脚本知道它被称为“stuff.js”,那么它可以查看DOM中的所有脚本标记

    var scripts = document.getElementsByTagName('script');
    
    然后它可以查看其名称的“src”属性。然而,这是一种黑客行为,在我看来,这似乎是您真正应该在服务器端解决的问题。

    ()解决了类似的问题。这是相关代码

    var js = /scriptaculous\.js(\?.*)?$/;
    $$('script[src]').findAll(function(s) {
        return s.src.match(js);
    }).each(function(s) {
        var path = s.src.replace(js, ''),
        includes = s.src.match(/\?.*load=([a-z,]*)/);
        (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
        function(include) { Scriptaculous.require(path+include+'.js') });
        }); 
    

    (其中有些部分类似于。每个部分都需要原型)

    如果您只想找到动态添加脚本的URI,那么这(有时)可能会起作用,但我怀疑这是他想要的。在动态添加脚本元素的情况下,您最好不必为此费心,而是先存储脚本URI,然后再创建脚本元素。什么?这与动态添加的脚本无关。这与脚本在解析时如何顺序添加到DOM有关。这确实管用。说得好。这在所有重要的浏览器中都可靠吗?我最初的评论有点倒退,因为这肯定不适用于动态添加的脚本,除非您总是在任何其他脚本之后添加它们。是的,这是可靠的,因为规范说明了如何解析和添加脚本。这只适用于通过脚本标记加载脚本的情况(之后标记保留在DOM中)。当然,大多数脚本都是。但是动态加载的代码将没有这样的标记。
    var js = /scriptaculous\.js(\?.*)?$/;
    $$('script[src]').findAll(function(s) {
        return s.src.match(js);
    }).each(function(s) {
        var path = s.src.replace(js, ''),
        includes = s.src.match(/\?.*load=([a-z,]*)/);
        (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
        function(include) { Scriptaculous.require(path+include+'.js') });
        });