通过继承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 相关文章推荐
基于Jquery的动态添加控件并取值的实现代码
Sep 24 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
Apr 23 Javascript
学习javascript的闭包,原型,和匿名函数之旅
Oct 18 Javascript
jQuery插件datatables使用教程
Apr 21 Javascript
基于js里调用函数时,函数名带括号和不带括号的区别
Jul 28 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
Dec 02 Javascript
使用vue-router设置每个页面的title方法
Feb 11 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
Sep 15 Javascript
vscode下的vue文件格式化问题
Nov 28 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
May 07 Javascript
javascript单张多张图无缝滚动实例代码
May 10 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
Jul 09 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
下载文件的点击数回填
2006/10/09 PHP
php session处理的定制
2009/03/16 PHP
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
laravel实现上传图片的两种方式小结
2019/10/12 PHP
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
Angular实现跨域(搜索框的下拉列表)
2017/02/16 Javascript
详解AngularJS ui-sref的简单使用
2017/04/24 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
2017/06/19 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
2019/03/19 jQuery
微信小程序自定义可滑动顶部TabBar选项卡实现页面切换功能示例
2019/05/14 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
Python yield 使用方法浅析
2017/05/20 Python
python实现归并排序算法
2018/11/22 Python
Django web框架使用url path name详解
2019/04/29 Python
Python发展史及网络爬虫
2019/06/19 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
微软台湾官方网站:Microsoft台湾
2018/08/15 全球购物
澳大利亚拥有最好的家具和家居用品在线目的地:Nestz
2019/02/23 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
一套软件测试笔试题
2014/07/25 面试题
如何写股份合作协议书
2014/09/11 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python