代码之家  ›  专栏  ›  技术社区  ›  SamGoody

包含的Javascript页面的路径

  •  2
  • SamGoody  · 技术社区  · 16 年前

    __file__

    我知道我可以获取页面URL,但需要获取JS URL。

    我知道图像相对于JavaScript文件的位置。我不知道Javascript相对于页面的位置。

    <body>
      <img id="img0" src="">
      <script src="js/imgMaker/myscript.js"></script>
    </body>
    
    function fixPath(){ 
      $$("#img0")[0].set('src','js/imgMaker/images/main.jpg');
    }
    

    请不要告诉我重新构造我的函数-这个例子被简化以解释需要。 在实际情况中,一个Mootools类正在分发,人们可以将其放入他们想要的任何文件夹中。

    我只需要读取script元素的src,但是这个类可以是任意数量的javascript文件的一部分,所以我不知道这个元素是什么样子。

    7 回复  |  直到 16 年前
        1
  •  3
  •   Boldewyn    16 年前

    JavaScript( __file__ 特征或任何类似的东西。

    最接近的可能是以下两种情况:

    1. 你刚才提到的:收获一切 src

    2. 作为一个必要的选项,必须在嵌入HTML文件中设置图像的路径。如果未设置,请使用合理且 有据可查


    <script type="text/javascript">
    var options = {
      'path_to_images': '/static/images/' // defaults to '/js/img/'
    };
    </script>
    
        2
  •  2
  •   rm.    16 年前

    基于 http://ejohn.org/blog/ file -in-javascript/

    (function(){
      this.__defineGetter__("__FILE__", function() {
        return (new Error).stack.split("\n")[2].split("@")[1].split(":").slice(0,-1).join(":");
      });
    })();
    
    (function(){
      this.__defineGetter__("__DIR__", function() {
        return __FILE__.substring(0, __FILE__.lastIndexOf('/'));
      });
    })();
    

    后来

    img.setAttribute('src', __DIR__ + '/' + file);
    
        3
  •  0
  •   matpol    16 年前

    如果您有文件夹:

    /webroot
      /images
      /scripts
    

    然后图像将是/images/whatever.jpg的绝对路径,脚本将是/scripts/js.js的绝对路径

        4
  •  0
  •   Sergey Galashyn    16 年前

        /*
         * get the base URL using current script
         */
    
        var baseURL = '';
        var myName = 'clone.js';
        var myPattern = /(^|[\/\\])clone\.js(\?|$)/;
    
        var scripts = document.getElementsByTagName("script");
    
        for (var i = 0; i < scripts.length; i++) {
            var src;
            if (src = scripts[i].getAttribute("src")) {
                if (src.match(myPattern)) {
                    baseURL =  src.replace(myName, '');
                    break;
                }
            }
        }
    

    变量 基本URL 应该包含你需要的东西。

        5
  •  0
  •   Aaron Digulla    16 年前

    到JS的路径是不相关的;HTML文件中的链接始终与HTML文件相关,即使您从外部JS修改它们。

    document.location.pathname . 此路径相对于web根目录,但您应该能够找到一个已知的子路径,然后从那里开始工作。

    例如,对于此页面,它 pathname /posts/1858724 . 你可以找 posts 然后从那里构建一个相对路径(例如 posts/../images/smiley.png )

        6
  •  0
  •   Alan M.    15 年前

    就我而言,我有两个原因:

    1. 用户可以访问不同的子域,每个子域都有自己的索引页。

    大多数引用都指向脚本的相同src位置,但有些不指向。例如,位于树的不同级别的树需要不同的路径。

    我通过给索引页的脚本标记分配一个id来解决这个问题。例如,头部可能包括。。。

    <script id='scriptLocation' type='text/javascript' language='javascript' src='../scripts.test/script.js'></script>
    

    然后我的JavaScript就可以读取路径了。。。

    var myPath = document.getElementById("scriptLocation").src;
    
        7
  •  0
  •   SamGoody    15 年前

    找到了另一种方法,也许有更多的JS忍者可以解决这个问题。

    但是,在某些情况下,如果可以将CSS文件与javascript一起包含,并为第一条规则提供一些唯一标识符。 可以循环遍历所有样式表,直到找到标识符为[if(document.stylsheets[i].cssRules[0]==thisIs:myCSS]的样式表,然后使用ownerNode获取该文件的路径,并假设JS的路径相同。

    这很复杂,也不是很有用,但它是另一种方法——可能会引发某人更好的想法。