使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之end()和pushStack()使用介绍
Feb 07 Javascript
js实现省市联动效果的简单实例
Feb 10 Javascript
jquery可定制的在线UEditor编辑器
Nov 17 Javascript
JS原型链怎么理解
Jun 27 Javascript
微信和qq时间格式模板实例详解
Oct 21 Javascript
layer实现弹窗提交信息
Dec 12 Javascript
详解angularjs结合pagination插件实现分页功能
Feb 10 Javascript
javaScript实现滚动条事件详解
Mar 24 Javascript
JS中图片压缩的方法小结
Nov 14 Javascript
微信公众平台获取access_token的方法步骤
Mar 29 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
Feb 11 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
Aug 06 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
Mysql和网页显示乱码解决方法集锦
2008/03/27 PHP
微信公众平台接口开发入门示例
2014/12/24 PHP
浅谈php自定义错误日志
2015/02/13 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
Yii2框架可逆加密简单实现方法
2017/08/25 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
jQuery创建平滑的页面滚动(顶部或底部)
2013/02/26 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
使用jsonp实现跨域获取数据实例讲解
2016/12/25 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
Vue实现剪切板图片压缩功能
2020/02/04 Javascript
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
对numpy中向量式三目运算符详解
2018/10/31 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
通过实例学习Python Excel操作
2020/01/06 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
html5菜单折纸效果
2014/04/22 HTML / CSS
在网络中有两台主机A和B,并通过路由器和其他交换设备连接起来,已经确认物理连接正确无误,怎么来测试这两台机器是否连通?如果不通,怎么来判断故障点?怎么排
2014/01/13 面试题
英语专业应届生求职信范文
2013/11/15 职场文书
大学校庆策划书
2014/01/31 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS
python中使用redis用法详解
2022/12/24 Redis