zoukankan      html  css  js  c++  java
  • 获取当前Javascript脚本文件的路径

    获取当前JavaScript脚本文件的路径,在特定场景下可能需要,比如写模块加载器,或者进行日志记录。并没有统一的方法适用于所有浏览器,本文分几种情况进行说明。

    (1). 标准做法: document.currentScript 对象的src属性 
    适用于Firefox 4+, Chrome 29+, Opera 16+, Safari 8+.

    var src = document.currentScript.src;

    (2). 从Error对象的stack属性中提取文件路径 
    适用于IE10+, Safari 7-, Opera 15-.

    var e = new Error('err');
    var stack = e.stack || e.sourceURL || e.stacktrace || '';
    var rgx = /(?:http|https|file)://.*?/.+?.js/, 
    var src = (rgx.exec(stack)||[])[0] || '';

    如果浏览器不支持Error构造函数,也可以通过try…catch来获取一个Error对象。

    监听onerror事件,来对Error对象处理,原理也是如此。onerror事件的回调函数的第2个参数就是src. 代码就不贴了。

    (3). 找document.scripts集合中的最后一个script元素的src 
    适用于脚本加载过程中执行的情况,不适用于脚本初始化完成后的调用。对浏览器没有要求。

    var src = document.scripts[document.scripts.length - 1].src;

    (4).查找document.scripts集合中readyState属性为interative的script元素的src 
    适用于IE9-. IE9以下浏览器中,script.readyState属性为interative表示脚本正在执行。

    var scripts = document.scripts, src;
    for (var i = scripts.length - 1; i>=0; i--){
        if (scripts[i].readyState === 'interative'){
            src = scripts[i].src;
            break;
        }
    }

    本文只是提供思路分析,如果需要在产品中使用,需要处理各种适用情形的判断。有人制作了一个JS函数(getCurrAbsPath.js)来处理。

  • 相关阅读:
    【BZOJ】4349: 最小树形图
    【AtCoder】AtCoder Petrozavodsk Contest 001
    【LOJ】#2525. 「HAOI2018」字串覆盖
    趣味题:恺撒Caesar密码(c++实现)
    趣味问题:画图(c++实现)
    趣味问题:到底买不买
    成绩大排队
    A除以B问题
    2017-统计字符个数
    2016-数据的交换输出
  • 原文地址:https://www.cnblogs.com/hehuiself/p/7411753.html
Copyright © 2011-2022 走看看