通过继承IHttpHandle实现JS插件的组织与管理


Posted in Javascript onJuly 13, 2010

如:

<!— Js插件 --> 
<script type="text/javascript" src="/scripts/popup.js"></script> 
<script type="text/javascript" src="/scripts/popup-util.js"></script> 
<!—Jquery插件 --> 
<script type="text/javascript" src="/scripts/jquery-1.3.2.js"></script> 
<script type="text/javascript" src="/scripts/jquery.autocomplete/ jquery.autocomplete.js"> 
</script> 
<link type="text/css" rel="stylesheet" href="/scripts/jquery.autocomplete/jquery.autocomplete.css" /> 
<script type="text/javascript" src="/scripts/jquery.tip/jquery.tip.js"></script> 
<link type="text/css" rel="stylesheet" href="/scripts/jquery.tip/jquery.tip.css" />

有时,页面上引用的Js文件会更多,如果页面排版的整齐还好点,一旦排版的稍微不整齐,那么整个页面就显得很杂乱,那么究竟有没有更简洁的方法引用Js文件呢?本文就讨论一下这个问题。

开始做之前先在cnblogs上搜索了一下,果然有相关文章介绍:https://3water.com/article/24220.htm,不过本篇文章的博主不是很厚道(^_^),虽然给了一个demo下载,但是是编译后的程序,看不到源码,看不到源码也就算了,运行还出错,后来经过尝试,demo程序中还少一个script.do文件,并且还需要在IIS中配置“.do”的应用程序扩展,方法如下:在IIS中选择所建的网站,右键单击“属性”如下图:
通过继承IHttpHandle实现JS插件的组织与管理
说归正题,虽然只给了一个编译后的demo程序,但经过反编译查看代码后,还是为本人重新实现功能提供了一些好的建议,在此还是要对那篇文章的博主表示感谢^_^,接下来看一下本人是如果组织和管理JS文件的:

1. 在页面上需要添加一句引用:<script type="text/javascript" src="/Scripts/JsPlugins.js?plugins=popup&jqPlugins=autocomplete,tip"></script>
说明:参数plugins后面赋值的是原生js写的插件名,多个插件可以用逗号“,”隔开;
参数jqPlugins后面赋值的是jquery的插件名,同样,多个jquery插件名可以用逗号“,”隔开。

2. 为项目添加Js配置文件,如下:

<?xml version="1.0" encoding="utf-8" ?> 
<script path="/scripts/"> 
<!-- javascript 插件 --> 
<plugins name="javascript" file=""> 
<!-- 百度的弹出层 --> 
<plugin name="popup" file="popup-min.js"> 
<require file="popup-util.js"></require> 
</plugin> 
</plugins> 
<!-- jquery 插件 --> 
<plugins name="jquery" file="jquery-1.3.2.js"> color: #000000;"> 
<!--自动完成--> 
<plugin name="autocomplete" file="plugins/autocomplete/jquery.autocomplete.js"> 
<require file="plugins/autocomplete/jquery.autocomplete.css"></require> 
</plugin> 
<!--提示框--> 
<plugin name="tip" file="plugins/tip/jquery.tip.js"> 
<lazy file="plugins/tip/bs.css"></lazy> 
</plugin> 
</plugins> 
</script>

3. 在项目的web.config文件中添加HttpHandle,如下:
<appSettings>
<add key="JsConfig" value="~/Config/JsConfig.xml"/>
</appSettings>

<httpHandlers>
<add verb="*" path="JsPlugins.js" type="ScriptLoader.ScriptPluginHandle,ScriptLoader"/>
</httpHandlers>
另外,本人在实现的过程中还做了以下几方面改进:
1. 兼容IE6、IE7、IE8、Firefox、Safari、Opera浏览器(经测试,文中提到的那个demo程序在IE6下功能失效)
2. 使用了匿名回调函数,避免了与加载的Js文件中的方法重名
3. 可以同时调用原生js插件和jquery插件,前提是两者不会产生冲突

具体实现大家可以下载源码,本源码的开发环境VS2008 + ASP.NET MVC 1.0

Javascript 相关文章推荐
Javascript 面向对象 继承
May 13 Javascript
最新28个很棒的jQuery 教程
May 28 Javascript
js工具方法弹出蒙版
May 08 Javascript
extjs每个组件要设置唯一的ID否则会出错
Jun 15 Javascript
简单的渐变轮播插件
Jan 12 Javascript
Angular2 父子组件数据通信实例
Jun 22 Javascript
jQuery实现的回车触发按钮事件功能示例
Mar 25 jQuery
详解小程序原生使用ES7 async/await语法
Aug 06 Javascript
又拍云 Node.js 实现文件上传、删除功能
Oct 28 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
vue iview多张图片大图预览、缩放翻转
Jul 13 Javascript
js仿淘宝放大镜效果
Dec 28 Javascript
jQuery.Autocomplete实现自动完成功能(详解)
Jul 13 #Javascript
javascript中字符串拼接需注意的问题
Jul 13 #Javascript
转换json格式的日期为Javascript对象的函数
Jul 13 #Javascript
Jquery+WebService 校验账号是否已被注册的代码
Jul 12 #Javascript
Javascript(AJAX)解析XML的代码(兼容FIREFOX/IE)
Jul 11 #Javascript
不同浏览器的怪癖小结
Jul 11 #Javascript
return false;和e.preventDefault();的区别
Jul 11 #Javascript
You might like
php遍历文件夹和文件列表示例分享
2014/03/11 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
Yii2中OAuth扩展及QQ互联登录实现方法
2016/05/16 PHP
PHP中include()与require()的区别说明
2017/02/14 PHP
写入cookie的JavaScript代码库 cookieLibrary.js
2009/10/24 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
seajs1.3.0源码解析之module依赖有序加载
2012/11/07 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
js 赋值包含单引号双引号问题的解决方法
2014/02/26 Javascript
JavaScript动态生成二维码图片
2016/04/20 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
Node.js实现文件上传
2016/07/05 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
如何优雅地在vue中添加权限控制示例详解
2019/03/07 Javascript
js简单遍历获取对象中的属性值的方法示例
2019/06/19 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
pyqt和pyside开发图形化界面
2014/01/22 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
如何使用Python多线程测试并发漏洞
2019/12/18 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python猴子补丁知识点总结
2020/01/05 Python
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
店长助理岗位职责
2013/12/13 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP
服务器间如何实现文件共享
2022/05/20 Servers