使javascript也能包含文件


Posted in Javascript onOctober 26, 2006

javascript功能强大,但一个问题是它不能包含其它的js文件,而其它非脚本语言却基本都是有这个功能的,不得不觉得有点遗憾。穷则思变,越来越发现不动态导入文件会严重加大加载页面的时间,经过实验,发现了一个办法,利用xhtml来实现这个功能,下面的函数就可以动态导入javascript文件和css样式文件: 

function $import(path,type,title){ 
 var s,i; 
 if(type=="js"){ 
  var ss=document.getElementsByTagName("script"); 
  for(i=0;i<ss.length;i++){ 
   if(ss[i].src && ss[i].src.indexOf(path)!=-1)return; 
  } 
  s=document.createElement("script"); 
  s.type="text/javascript"; 
  s.src=path; 
 }else if(type=="css"){ 
  var ls=document.getElementsByTagName("link"); 
  for(i=0;i<ls.length;i++){ 
   if(ls[i].href && ls[i].href.indexOf(path)!=-1)return; 
  } 
  s=document.createElement("link"); 
  s.rel="alternate stylesheet"; 
  s.type="text/css"; 
  s.href=path; 
  s.title=title; 
  s.disabled=false; 
 } 
 else return; 
 var head=document.getElementsByTagName("head")[0]; 
 head.appendChild(s); 
}

对于样式文件,默认导入后是立即生效的,这有可能会导致和前面一种选定样式效果重叠,造成混乱。所以在我的blog中是使用下面的函数来实现样式的切换功能: 

 
function setStyle(title) { 
 var i, links,eflag=false; 
 links = document.getElementsByTagName("link"); 
 for(i=0; links[i]; i++) { 
  if(links[i].getAttribute("rel").indexOf("style") != -1 && links[i].getAttribute("title")) { 
   links[i].disabled = true; 
   if(links[i].getAttribute("title").indexOf(title) != -1){links[i].disabled = false;eflag=true;} 
  } 
 } 
 if(!eflag){ 
  $import("skin/"+title+"/default.css","css",title); 
  setStyle(title); 
 } 
}

最后,说明一下,因为javascript文件是需要从远程加载的,所以有人可能会问在调用$import()函数后,是立即执行$import()后面的语句,还是等加载完以后再执行其后的语句。我粗略试验了一下,发现是等加载完后再执行后面的语句的,而且如果加载的js里有立即执行的代码,那么它会先于$import()后面的语句执行。这也是我们想要的结果,因为这样就可以在$import()之后调用加载的文件里的函数了。
Javascript 相关文章推荐
jQuery 1.4 15个你应该知道的新特性(译)
Jan 24 Javascript
javascript中创建对象的三种常用方法
Dec 30 Javascript
javascript实现数字验证码的简单实例
Feb 10 Javascript
jQuery Ajax使用实例
Apr 16 Javascript
基于JavaScript实现移动端无限加载分页
Mar 27 Javascript
基于vuejs实现一个todolist项目
Apr 11 Javascript
微信小程序 本地数据存储实例详解
Apr 13 Javascript
详解为生产环境编译Angular2应用的方法
Dec 10 Javascript
webpack自动打包和热更新的实现方法
Jun 24 Javascript
jQuery中DOM操作原则实例分析
Aug 01 jQuery
Vue执行方法,方法获取data值,设置data值,方法传值操作
Aug 05 Javascript
vue实现抽屉弹窗效果
Nov 15 Javascript
利用XMLHTTP传递参数在另一页面执行并刷新本页
Oct 26 #Javascript
如何用javascript控制上传文件的大小
Oct 26 #Javascript
动态改变textbox的宽高的js
Oct 26 #Javascript
js传值 判断
Oct 26 #Javascript
点击广告后才能获得下载地址
Oct 26 #Javascript
PJBlog插件 防刷新的在线播放器
Oct 25 #Javascript
PJ Blog修改-禁止复制的代码和方法
Oct 25 #Javascript
You might like
php构造函数实例讲解
2013/11/13 PHP
php分页查询mysql结果的base64处理方法示例
2017/05/18 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
top.location.href 没有权限 解决方法
2008/08/05 Javascript
js文件中调用js的实现方法小结
2009/10/23 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
基本DOM节点操作
2017/01/17 Javascript
ThinkPHP+jquery实现“加载更多”功能代码
2017/03/11 Javascript
axios拦截设置和错误处理方法
2018/03/05 Javascript
解决angularjs中同步执行http请求的方法
2018/08/13 Javascript
ES6基础之默认参数值
2019/02/21 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
JavaScript解析JSON数据示例
2019/07/16 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
JS实现进度条动态加载特效
2020/03/25 Javascript
微信小程序实现身份证取景框拍摄
2020/09/09 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
[01:04:01]2014 DOTA2华西杯精英邀请赛5 24 DK VS VG
2014/05/25 DOTA
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
python装饰器使用方法实例
2013/11/21 Python
Python之Scrapy爬虫框架安装及简单使用详解
2017/12/22 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
使用Pandas将inf, nan转化成特定的值
2019/12/19 Python
python文件编写好后如何实践
2020/07/07 Python
Chi Chi London官网:购买连衣裙和礼服
2020/10/25 全球购物
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
歼十出击观后感
2015/06/11 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
党组织关系的介绍信模板
2019/06/21 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers