原文:javascript中外部js文件取得自身完整路径得办法

有时候我们需要引入一个外部js文件,这个js文件又需要用到自己的路径或者是所在的目录,别问怎么又这么变态的需求,开发做久了各种奇葩需求也就有了!

有人第一时间想到的是location.href,可是哥哥,那个引用页面的路径啊。比如a.html:

<html>
<script src="/b/c.js"></script>
</html>

这样的话我们用location.href获取到的值是a.html文件本身的路径,并不是我们需要的c.js的路径。

那怎么办?

我先开始想到了一个方法,就是通过js的文件名去匹配,比如我写一个插件叫做dragondean.js,那么我可以将引用页(a.html)中所有的script标签获取到,然后通过匹配src属性中是否含有dragondean来获得我们需要的js文件路径。

但是这样一来就有问题了:

1.我们的插件dragondean.js在使用的时候不能被更名。

2.一个插件的js文件重复引用会导致错误

这种方式总是没有一种踏实的感觉...

后来.....我看了一片文章:http://blog.sina.com.cn/s/blog_715fa5c00100pwrj.html

里面提到的思路用到了浏览器对网页加载顺序的一个技巧,经过测试确实可行!

原理就是网页文档在解析的时候一边加载一边解析,当解析到script的时候先下载src中的内容并解析或者解析script中间的内容,然后再往下解析。当解析到当前script的时候我们可以获取已经加载的所有script标签,最后一个就是我们需要得到的这个了。

用到的方法代码如下:

获取自身的完整路径:

function getMySrc(){
var scriptSrc = document.getElementsByTagName('script')[document.getElementsByTagName('script').length -1].src;
return scriptSrc;
}

获得自身的文件名:

function getMyScriptName(){
var scriptSrc = document.getElementsByTagName('script')[document.getElementsByTagName('script').length -1].src;
var jsName = scriptSrc.split('/')[scriptSrc.split('/').length-1];
return jsName;
}

获得自身所在的目录路径:

function getMyPath(){
var scriptSrc = document.getElementsByTagName('script')[document.getElementsByTagName('script').length -1].src;
var jsName = scriptSrc.split('/')[scriptSrc.split('/').length-1];
return scriptSrc.replace(jsName,'');
}

这些内容都是借鉴的前面那篇博文的,只不过做了一个细化!再次感谢原文作者!

javascript中外部js文件取得自身完整路径得办法的更多相关文章

  1. eclipse中jquery.js文件有错误提示…

    eclipse中jquery.js文件有错误提示的解决办法 2013-04-06 19:18 浏览次数:382 由于jquery.js文件进行了压缩,压缩之后的语法eclipse无法完全识别,所以有错 ...

  2. kettle转换JavaScript加载外部js文件

    日常开发中,时常会出现这样一种情况.有大量的函数是通用的.而每个JavaScript里面写一遍,给维护带来很大的困扰.因而需要将公共的函数写在外部js文件中.这时就需要引入外部的公共文件了.下面是在转 ...

  3. 在SharePoint解决方案中使用JavaScript (1) – 引用.js文件

    本文是系列文章的第一篇. 在SharePoint解决方案中使用JavaScript (0) 作为在SharePoint应用程序中使用JavaScript的第一步,就是要知道如何将一个写好的.js文件, ...

  4. win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件

    win7,vs2010,asp.net项目中修改外部js文件,在调试时加载的还是旧文件 我杀过 w3wp.exe和asp.net_state的进程,重启 iis admin的服务,都还是不行. 只是把 ...

  5. vue2项目中引用外部js文件

    vue2项目目录如下(utils文件夹是自己手工建的,然后在utils里新建js文件): 使用import导入文件时,注意路径,路径不对会报错: 导入之后使用外部js函数时,直接写导入时的名字加小括号 ...

  6. html中引入外部js文件,使用外部js文件里的方法

    外部js文件1: /** * 加了window.onload 后,直接引入js文件即可 * 页面资源全部加载完毕后会自动调用window.onload里的回调函数 */ window.addEvent ...

  7. 延迟加载外部js文件,延迟加载图片(jquery.lazyload.js和echo,js)

    js里一说到延迟加载,大都离不开两种情形,即外部Js文件的延迟加载,以及网页图片的延迟加载: 1.首先简单说一下js文件的3种延迟加载方式: (1)<script type="text ...

  8. 为什么要采用外部js文件

    这篇文章主要讲的是为什么要采用外部js文件,有什么好处. 为什么不把js内嵌在html中呢,这样不是好分析吗?对,这样你是好分析,同样的别人呢?不内嵌在html中有如下原因:   安全性: 只要查看页 ...

  9. AJAX载入外部JS文件到页面并让其执行的方法(附源码)

    一. 向HTML页面中动态添加JS文件(从外部载入)并让其执行的两种方法 1.只适用于IE浏览器的简单方法: 先在文档中放置一张JS"空床"并添加ID:<script id= ...

随机推荐

  1. 华为HCNA教程(笔记)

    第一章 VRP操作基础 1VRP基础 MiniUsb串口连接交换机的方法 2eNSP入门 3命令行基础(1) eNSP中路由开启后(记住port)---第三方软件连接该路由方法:telnet 127. ...

  2. webform之session传值(临时数据的存储)与扩展属性 --(购物车练习)

    页面传值:1.QueryString传值在源页面写:Response.Redirect("Main.aspx?uid="+uid+"&pwd="+pwd ...

  3. 第一个hibernate文件 xml配置方法

    package com.entity; public class User { private String username; private String password; private In ...

  4. PHP - 验证类

    <?php /** * 验证类 * * @lastmodify 2014-5-16 * @author jy625 */ class VerifyAction{ /** * 是否为空值 */ p ...

  5. Action的返回值类型总结

    Action的返回值 MVC 中的 ActionResult是其他所有Action返回类型的基类,下面是我总结的返回类型,以相应的帮助方法: 下面是这些方法使用的更详细的例子 一.返回View     ...

  6. java BigDecimal的使用和四舍五入及格式规范(精准数据)

    • Java中的简单浮点数类型float和double不能够进行运算.不光是Java,在其它很多编程语言中也有这样的问题. 如果我们编译运行下面这个程序会看到什么? public   class  T ...

  7. linux下crontab的使用方法

    <span style="font-size:14px;">在Linux中任务可以被配置在指定的时间段.指定的日期.或系统平均载量低于指定的数量时自动运行. cront ...

  8. [整理]MongoDB 经常使用命令总结

    MongoDB 经常使用命令总结 简单的的增删改查数据 在查询结果中指定显示或者不显示某个字段 比如,我们希望在 lessons 集合中查找全部数据,可是不希望在返回结果中包括 slides 字段:由 ...

  9. Caffe —— Deep learning in Practice

    因工作交接须要. 要将caffe用法及总体结构描写叙述清楚. 鉴于也有同学问过我相关内容, 决定在本文中写个简单的tutorial, 方便大家參考. 本文简单的讲几个事情: Caffe能做什么? 为什 ...

  10. Swift - 使用MapKit显示地图,并在地图上做标记

    通过使用MapKit可以将地图嵌入到视图中,MapKit框架除了可以显示地图,还支持在地图上做标记. 1,通过mapType属性,可以设置地图的显示类型 MKMapType.Standard :标准地 ...