JS获取当前脚本文件的绝对路径

 更新时间:2016年03月02日 14:36:49   作者:^_^肥仔John  
这篇文章主要介绍了JS获取当前脚本文件的绝对路径的相关资料,感兴趣的小伙伴们可以参考一下

 当写模块加载器时,获取当前脚本文件的绝对路径作为基础路径是必不可少的一步,下面我们一起来探讨一下这个问题吧!

一、各大浏览器的实现方式                

 [a]. Chrome和FF

 超简单的一句足矣!

var getCurrAbsPath = function(){
 return document.currentScript.src;
};

这里利用了对象 document.currentScript ,它返回的是当前执行的script元素;然后调用script元素的src属性即可获取脚本文件的绝对路径。

  [b]. IE10+、Safari和Opera9

 利用Error对象的stack属性(IE10+)、sourceURL属性(Safari)和stacktrace属性(Opera9)萃取绝对路径

var getCurrAbsPath = function(){
  var a = {}, stack;
  try{
   a.b();
  }
  catch(e){
   stack = e.stack || e.sourceURL || e.stacktrace; 
  }
  var rExtractUri = /(?:http|https|file):\/\/.*?\/.+?.js/, 
    absPath = rExtractUri.exec(stack);
  return absPath[0] || '';
}; 

  [C]. IE5.5~9

 遍历文档中的script标签

var getCurrAbsPath = function(){
  var scripts = document.scripts;
  var isLt8 = ('' + document.querySelector).indexOf('[native code]') === -1;
  for (var i = scripts.length - 1, script; script = scripts[i--];){
    if (script.readyState === 'interative'){
     return isLt8 ? script.getAttribute('src', 4) : script.src;  
    }
  }
};

二、相关知识介绍                      

IE5.5~9下script的readyState表示该script元素的状态,分别有以下的状态值:

uninitialized:未初始化

loading:正在加载

loaded:加载完成

interative:执行中

complete:执行完

可通过订阅onreadystatechange事件来监听script元素状态的变化。但不幸的是loaded和complete状态并出现顺序不定且有可能仅出现其中一个,因此建议在动态添加script元素时,先设置src属性后再将script元素添加到DOM树中,这样loaded和complete状态仅会出现其中一个(虽然每次请求时,哪个出现是不定的),比较好监测。

 三、IE和FF下的另一种方式                

 通过订阅 window.onerror 事件,事件处理函数将接受三个参数,分别是msg,url和num。这里url就是当前脚本的绝对路径了。

以上就是本文的全部内容,希望对大家的学习有所帮助。

相关文章

  • js 动态生成json对象、时时更新json对象的方法

    js 动态生成json对象、时时更新json对象的方法

    下面小编就为大家带来一篇js 动态生成json对象、时时更新json对象的方法。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • javascript定时变换图片实例代码

    javascript定时变换图片实例代码

    javascript定时变换图片实例代码,需要的朋友可以参考一下
    2013-03-03
  • JS中完美兼容各大浏览器的scrolltop方法

    JS中完美兼容各大浏览器的scrolltop方法

    最近用到scrolloTop()想去获取滚动条距离顶部的距离,结果只有chrome下面可以正常的获取scrollTop,ff和ie下这个值都等于0,使得许多效果比如屏幕滚动等等均无法正常实现。究其原因是scrollTop()在各个浏览器中的兼容性问题,今天我们就来详细探讨下。
    2015-04-04
  • javaScript(JS)替换节点实现思路介绍

    javaScript(JS)替换节点实现思路介绍

    获取要替换的节点,这种方法只适用于IE浏览器以及适用于各种浏览器的写法,感兴趣的朋友可以参考下哈
    2013-04-04
  • Bootstrap Fileinput 4.4.7文件上传实例详解

    Bootstrap Fileinput 4.4.7文件上传实例详解

    这篇文章主要为大家详细介绍了Bootstrap Fileinput 4.4.7文件上传实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • Dropzone.js实现文件拖拽上传功能(附源码下载)

    Dropzone.js实现文件拖拽上传功能(附源码下载)

    dropzone.js是重量轻的JavaScript库,将HTML元素设置为一个降落区,并通过Ajax文件被上传到服务器。本文给大家详细介绍Dropzone.js实现文件拖拽上传功能,需要的朋友参考下吧
    2016-11-11
  • 详解JavaScript的计时器和按钮效果设置

    详解JavaScript的计时器和按钮效果设置

    这篇文章主要为大家介绍了JavaScript的计时器和按钮效果设置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • JS 判断代码全收集

    JS 判断代码全收集

    js判断代码,比较全,大家可以看下代码,熟悉常见判断代码。
    2009-04-04
  • js几秒以后倒计时跳转示例

    js几秒以后倒计时跳转示例

    使用js实现几秒以后倒计时跳转,这个在某些特殊情况下还是比较实用的,下面为大家介绍下具体的实现步骤,感兴趣的朋友不要错过
    2013-12-12
  • JS基于开关思想实现的数组去重功能【案例】

    JS基于开关思想实现的数组去重功能【案例】

    这篇文章主要介绍了JS基于开关思想实现的数组去重功能,简单分析了开关思想的原理,并结合具体实例形式分析了javascript基于开关思想实现数组去重相关操作技巧,需要的朋友可以参考下
    2019-02-02

最新评论