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就是当前脚本的绝对路径了。

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

(0)

相关推荐

  • js获取上传文件的绝对路径实现方法

    在html中 <input type="file" id="importFile" /> <input type="button" onclick="upload()"/> <script> function upload() { var filename = document.getElementById("importFile").value; // 这时的filen

  • JS取得绝对路径的实现代码

    在项目中,我们经常要得到项目的绝对路径,方便我们上传下载文件,JS为我们提供了方法,虽说要迂回一下.代码如下: function getRealPath(){ //获取当前网址,如: http://localhost:8083/myproj/view/my.jsp var curWwwPath=window.document.location.href; //获取主机地址之后的目录,如: myproj/view/my.jsp var pathName=window.document.locati

  • xcode中获取js文件的路径方法(推荐)

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"click" ofType:@"js"]; 理论上这样是应该能获取click.js的路径的,但是返回的确是null. 解决方法是: 项目的TARGETS-->Build Phases 在Compile Sources中 ,去掉你的js文件 在Copy Bundle Resources中,加上你的js文件 原理应该就是改之前Xcode默认把

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

    当写模块加载器时,获取当前脚本文件的绝对路径作为基础路径是必不可少的一步,下面我们一起来探讨一下这个问题吧! 一.各大浏览器的实现方式 [a]. Chrome和FF 超简单的一句足矣! var getCurrAbsPath = function(){ return document.currentScript.src; }; 这里利用了对象 document.currentScript ,它返回的是当前执行的script元素:然后调用script元素的src属性即可获取脚本文件的绝对路径. [b

  • js 获取当前web应用的上下文路径实现方法

    js 获取当前web应用的上下文路径实现方法 //js webcontext var webroot=document.location.href; webroot=webroot.substring(webroot.indexOf('//')+2,webroot.length); webroot=webroot.substring(webroot.indexOf('/')+1,webroot.length); webroot=webroot.substring(0,webroot.indexO

  • Python获取当前脚本文件夹(Script)的绝对路径方法代码

    Python脚本有一个毛病,当使用相对路径时,被另一个不同目录下的py文件中导入时,会报找不到对应文件的问题.感觉是当前工作目录变成了导入py文件当前目录.如果你有配置文件的读取操作,然后都放在一个py文件中,而你又用的是相对路径,而且这个py文件在多个不同目录下的py文件中被导入,那就呵呵了...还是用绝对路径吧. 解决这个问题,可以用绝对路径.当然是自动的绝对路径,而不是每次都手动给前缀赋值,让脚本自动寻找当前文件的绝对路径. 此处分享在python下获取一个脚本的绝对路径的2种方式. 1.

  • node.js开机自启动脚本文件

    复制代码 代码如下: #!/bin/bash ### BEGIN INIT INFO # Provides:       xiyoulib # Required-Start:   $all # Required-Stop:     $all # Default-Start:     2 3 4 5 # Default-Stop:   0 1 6 # Short-Description: Start daemon at boot time # Description:     Enable ser

  • php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法

    在php命令行下执行.php文件时,执行环境的工作目录(getcwd( ))是php命令程序(php.exe)所在目录,所以如果想在文件内使用相对路径时,要先切换当前的工作目录才行. 小测试程序: 复制代码 代码如下: <?php  $oldpath = getcwd();    // 原始工作目录 php.exe所在目录  $path = dirname(__FILE__);     chdir($path);           // 切换工作目录为当前文件所在目录  $fpath = &quo

  • python运行脚本文件的三种方法实例

    目录 python脚本执行的3种方法: 方法一:交互模式直接执行语句 方法二:通过脚本输出 方法三:脚本中指定 python 路径,修改文件为可执行文件 总结 python脚本执行的3种方法: (找到自己能够使用的方法,能用的方法就是好方法) 方法一:交互模式直接执行语句 交互模式下直接编写执行 Python语句,不用再创建脚本文件 Windows下: 打开并进入命令提示符-------->输入python并回车-------->即可进入交互模式 Linux 下: 打开终端模拟器-------

  • js 获取本地文件及目录的方法(推荐)

    Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高级语言中经常做的工作一样.怎么样,你是否需要了解这方面的知识?那就请跟我来,本文将详细描述如何使用Javascript语言进行文件操作. 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详

  • js如何获取file控件的完整路径具体实现代码

    今天做一个项目,需要隐藏input file然后获取它的值,但连jquery都无法获取它的值 复制代码 代码如下: <script type="text/javascript"> //FX获取文件路径方法 function readFileFirefox(fileBrowser) { try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catc

  • PowerShell包含另一个脚本文件和获取当前脚本所在目录的方法例子

    本文介绍在PowerShell脚本中,如何获取脚本文件(.ps1文件)所在的目录.本文介绍在方法适用于PowerShell 3.0. 在PowerShell 3.0中,有一个变量可以很方便的获取脚本所在的目录.我们在e:\ps\script1.ps1和script2.ps1,内容分别如下: script1.ps1内容: 复制代码 代码如下: Write-Host "This is script1.ps1" Write-Host "Let me call script2.ps1

随机推荐