从5.5版本开始,Internet Explorer(IE)开始支持Web 行为的概念。这些行为是由后缀名为.htc的脚本文件描述的,它们定义了一套方法和属性,程序员几乎可以把这些方法和属性应用到HTML页面上的任何元素上去。Web 行为是非常伟大的因为它们允许程序员把自定义的功能“连接”到现有的元素和控件,而不是必须让用户下载二进制文件(例如ActiveX 控件)来完成这个功能。Web 行为还是推荐的扩展IE对象模型和控件集的方法。微软在它的开发者站点上的DHTML 行为库栏目里提供了几个定制的Web行为。本文中讨论一个比较新的Web 行为:WebService行为。
Web 服务是通过一个开放的简单对象访问协议(SOAP)来传递参数和接收返回值,以便在Web上提供接口无关的软件服务的方法。在Internet上有许多例子和文章帮助你创建Web 服务并从传统的基于窗口表单的应用程序或者在服务器端来使用这些Web 服务,但是也可以使用WebService 行为也可以在客户浏览器上使用Web 服务。
从客户浏览器调用一个Web 服务的好处包括能够得到服务器更快的响应时间,结果是生成交互能力更强的页面并让用户用起来更高兴。与传统的将表单发回服务器然后接收一个新的页面不同的是(这个过程包括重新下载图片和其它的内容),WebService行为使用XMLHTTP在后台只发送和接收与事务处理过程相关的内容,然后这些内容又可以通过DHTML和脚本进行显示。
我所知道的目前支持Web 行为的唯一一个浏览器是IE;开发者们知道避免使用只能在IE上使用的功能。但是W3C在工作草案里有这个CSS的扩展以作为未来的标准。
如果你决定现在就使用Web 行为,你可以使用下面的JavaScript函数来检测客户端是否支持这个功能:
- function canUseBehaviors() {
- var ua = window.navigator.userAgent;
- var msiePos = ua.indexOf('MSIE');
- var msieVer = 0;
- var behaviorsAvailable = false;
- var iHandle = 0;
- if (msiePos >= 0) {
- msieMajorVer = parseInt(ua.charAt(msiePos + 5));
- msieMinorVer = parseInt(ua.charAt(msiePos + 7));
- if (msieMajorVer >= 5) {
- if (((msieMajorVer == 5) && (msieMinorVer >= 5)) ||
- (msieMajorVer > 5)) {
- behaviorsAvailable = true;
- }
- }
- }
- return behaviorsAvailable;
- }
使用上面的函数,你可以在运行时确定是否能够使用WebService 行为来调用Web 服务并使用IE的DHTML功能来显示结果或者是把这个表单发送给服务器让服务器来完成必要的操作,然后再次生成一个完整的页面。使用CSS语法来为一个元素添加WebService行为不会影响不支持特定CSS属性的浏览器。
微软提供了一个很好的参考,程序员可以用它更好的熟悉从客户端访问Web 服务。开发者还可以在微软的站点上找到必要的HTML 组件(*.htc)文件。
有了客户端工具包中的WebService行为,开发者们可以为Web 消费者创建更丰富更具交互性的页面,它们与使用大型主机提供的Web 服务或者基于表单窗口的应用程序的企业用户的功能是一样的。这将帮助消除冗余的代码并能通过为服务提供的特定功能提高响应时间来增强用户体验的快感。
例子:《用htc文件,为按钮添加 link 和 target 属性》
做WEB程序的时候经常需要用一个按钮来跳转到一个页面,或打开新窗口;由于按钮没有link属性,所以经常要写脚本来控制,感觉有些麻烦,最近看了一些关于htc的文档,发现htc可以为按钮添加属性,所以就写了个例子。
【文件:test.htm】
- <link href="style.css" rel="stylesheet" type="text/css">
- <input type=button link="http://www.sina.com.cn" value="打开新浪">
- <input type=button link="http://www.sina.com.cn" value="新窗口打开新浪" target="_blank">
【文件:style.css】
- input {
- behavior:url("input.htc");
- }
【文件:input.htc】
- <public:component>
- <!--添加连接-->
- <public:property name="link" value="" />
- <!--添加是否在新窗口打开属性-->
- <public:property name="target" value="" />
- <script>
- if(this.onclick == null) {
- onclick = function() {
- if (link != "") {
- if (target == "_blank") {
- window.open(link);
- } else {
- location.href = link;
- }
- }
- };
- };
- </script>
- </public:component>
把上面的代码分别保存,放在同一个目录下就可以了,以后只要引入了style.css,那么页面中的按钮就多了两个属性link,target。
如果你设置了按钮的onclick属性,那么link属性就不执行了,毕竟默认的属性优先。