使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 相关文章推荐
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
jQuery帮助之筛选查找 children([expr])
Jan 31 Javascript
Javascript 检测键盘按键信息及键码值对应介绍
Jan 03 Javascript
Array 重排序方法和操作方法的简单实例
Jan 24 Javascript
Node.js中HTTP模块与事件模块详解
Nov 14 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
Aug 13 Javascript
简单解析JavaScript中的__proto__属性
May 10 Javascript
Bootstrap媒体对象学习使用
Mar 07 Javascript
js读取json文件片段中的数据实例
Mar 09 Javascript
ES6新特性六:promise对象实例详解
Apr 21 Javascript
详解Angular4中路由Router类的跳转navigate
Jun 09 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
利用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时间戳使用实例代码
2008/06/07 PHP
php实现编辑和保存文件的方法
2015/07/20 PHP
Yii2中datetime类的使用
2016/12/17 PHP
php7 安装yar 生成docker镜像
2017/05/09 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
laravel 使用事件系统统计浏览量的实现
2019/10/16 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
JavaScript 上万关键字瞬间匹配实现代码
2013/07/07 Javascript
Node.js中HTTP模块与事件模块详解
2014/11/14 Javascript
jquery获取checkbox的值并post提交
2015/01/14 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
手机开发必备技巧:javascript及CSS功能代码分享
2015/05/25 Javascript
基于JavaScript实现动态创建表格和增加表格行数
2015/12/20 Javascript
nodejs发送http请求时遇到404长时间未响应的解决方法
2017/12/10 NodeJs
Three.js中矩阵和向量的使用教程
2019/03/19 Javascript
如何从头实现一个node.js的koa框架
2019/06/17 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
Javascript原型链及instanceof原理详解
2020/05/25 Javascript
基于Ionic3实现选项卡切换并重新加载echarts
2020/09/24 Javascript
[02:33]DOTA2英雄基础教程 司夜刺客
2013/12/04 DOTA
python二叉树的实现实例
2013/11/21 Python
使用Python对SQLite数据库操作
2017/04/06 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
python中必要的名词解释
2019/11/20 Python
python如何查看安装了的模块
2020/06/23 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
澳大利亚最大的网上油画销售画廊:Direct Art Australia
2018/04/15 全球购物
老公给老婆的道歉信
2014/01/10 职场文书
亲属关系公证书
2014/04/08 职场文书
合作协议书格式范本
2016/03/21 职场文书
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python