在使用javascript编程时会遇到一个问题,就是当你给html添加事件时,由于浏览器默认的为冒泡型事件触发机制,所以会触发你不想触发的事件.那么通过如下的函数可以解决这个问题。
1.阻止事件冒泡
//如果提供了事件对象,则这是一个非IE浏览器
if ( e && e.stopPropagation )
//因此它支持W3C的stopPropagation()方法
e.stopPropagation();
else
//否则,我们需要使用IE的方式来取消事件冒泡
window.event.cancelBubble = true;
}
2.当按键后或者点击一个链接后,不希望按键或者链接执行时,可以取消返回值.即停止默认事件默认行为
function stopDefault( e ) {
//阻止默认浏览器动作(W3C)
if ( e && e.preventDefault )
e.preventDefault();
//IE中阻止函数器默认动作的方式
else
window.event.returnValue = false;
return false;
}
示例 : 点击页面的任何URL链接 不跳转。
for(var i=0;i<links.length;i++){
links[i].onlick=function(e){
alert('我不跳转,点我也没用');
stopDefault(e)
}}
另一个阻止冒泡常见的应用就是下拉菜单的效果,点击按钮,下拉菜单显示,在点击页面任何其它部分,下拉菜单隐藏。
document.onclick=function(){
b.style.display="none";
}
//为点击元素显示下拉菜单的元素阻止冒泡,这样document的click事件就被阻止执行
function showMenu(e) {
var e=window.event || e;
下拉菜单.style.display="block";
if(e.stopPropagation){
e.stopPropagation()
}
else{
e.cancelBubble=true;
}
}
点击按钮.onclick=下拉菜单.onclick=showMenu;
本文链接
前面四篇文章都是在描述如何用C++开发基于MFC的ActiveX插件以及如果对插件进行打包和在Web页面中调用,但确忽略了一个非常重要的问题:代码签名。《浏览器插件之ActiveX开发(三)》提及了两种注册插件的方法,其中IE自动下载并注册插件的方法就涉及到签名问题,如果cab包是未签名的或签名不被信任的,IE就拒绝注册该插件。
一、数字签名简述
现在的各种软件星罗密布、鱼龙混杂,用户在使用软件程序时一定要十分谨慎,稍不留意,就被病毒或恶意程序侵害。代码数字签名的出现就在一定程度上解决了这个问题。那么经过数字签名的软件有什么好处?软件一旦经过数字签名,至少可以保证以下两点:
1)该软件确实是由数字签名证书中显示的软件开发商开发的;
2)该软件自软件开发商发布以后,没有被第三方做过任何修改。
不过,要完全理解数字签名或PKI(数字签名是PKI的组成部分,Public Key Instructure),还需要理解一下基本常识,例如对称加密、非对称加密、摘要算法、公钥、私钥、数字证书、根证书等等。以下几篇文章均对这些概念做了通俗易懂的解读:
a) 白话数字签名
b) CA认证原理以及实现
c) 了解数字证书
d) 软件代码数字签名基本原理
e) 数字签名
f) 为什么需要PKI
g) 数字签名(代码签名)流程
h) 12306在线买火车票为什么需要安装根证书
二、为什么ActiveX需要数字签名?
由于ActiveX插件在运行时与本地桌面应用程序一样,对用户系统的资源有极大的访问权限,如果让任何ActiveX通过Web页面都能自动下载并注册的话,那对用户必将造成非常大的威胁。所以默认设置下,IE将对需自动下载的cab文件进行数字签名认证,只有经过数字签名了且签名认证通过的cab包才自动下载并注册到用户系统中。
一般地,不仅仅需要对cab包进行代码签名,在打cab包之前还会对ocx文件进行代码签名。
三、如何进行代码签名?
1、首先需准备用于代码签名的相关工具SignTool.exe,可以从这里下载。
2、申请可用于ocx文件签名的代码签名数字证书,一般是需付费的。如果是测试用,可以有几种方式:
a) 自己创建一个测试签名证书以及根证书;
b) 可以从www.ca365.com网站申请免费代码签名证书或测试证书(应用时需自动导入根证书到用户系统里);
c) 借用淘宝的支付宝证书(淘宝对每个支付宝用户都可以颁发一个数字证书)。
申请数字证书的过程实际上是:
1) 在申请者的计算机上创建一个密钥对,即一个私钥和一个公钥,私钥保留在申请者计算机内,将公钥传送给CA机构;
2) CA机构在通过必要的线下审核后(测试证书和免费证书相当于没有审核过程的),用CA自己的私钥对申请者的申请信息进行签名(申请者信息包括申请者传过来的公钥、申请者自身基本信息等),并加上时间戳。CA对申请信息进行加密后就生成了一个证书,一般是以.cer文件的形式下发给申请者。
3、用signTool工具对文件进行签名:
其中:
xxxx.pfx 是签名证书(实际上包含了代码签名数字证书和私钥,在IE的证书管理容器里“个人”里导出时可以选择包含私钥);
http://timestamp.verisign.com/scripts/timstamp.dll 是时间戳服务。
有关代码签名以及创建测试签名证书的问题以下文章均有详细介绍,不再赘述:
- a) 制作临时证书为ActiveX控件签名
- b) 给控件做数字签名
- c) 微软代码签名证书使用指南
- d) VeriSign代码签名证书技术白皮书_v1.0_090413
- e) VC++开发Activex控件以及签名发布
- f) VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- g) ActiveX的数字签名
- h) A Complete ActiveX Web Control Tutorial – CodeProject
四、根证书自动安装问题
如果数字签名证书是从VeriSign等机构购买的,一般不存在根证书问题,因为微软的IE已经默认将VeriSign设置为受信任的根证书机构了:
但如果是从CA365这类不是很权威的机构申请的证书,由于这些机构的根证书默认并不在IE的“受信任的根证书颁发机构”名单里,所以在使
外部样式表
采用外部样式表是最好的,它能使创建网页变的简单。将所有样式信息放在一个文件里,然后用一行代码引用它即可。
代码很容易错字,检查办法有firefox – tools – error 控制台 – 点击“警告(warnings)”就可以看到firefox 无法识别的css代码。
关联外部样式表
<link>标签
rel-- 表示连接类型 --- styesheet 指的是链接到样式表。
type –- 是让浏览器知道需要哪一种数据,这里是css文件。
href— 指向css文件位置目录。
浏览器为了能快速浏览网页,会在浏览后预留存储图片,外部css文件,这叫高速缓存。但浏览器缓存重复调用会导致网站设计出错,解决办法是让浏览器重新加载链接文件,Ctrl+F5或Ctrl+Shint+R。
内部样式表
内部样式表是有多个样式组成,是网页代码的一部分。
在<head>,<stype> 标签之间
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<style type="text/css">
h1{
color:#06C;
}
p {
color:#33F;
}
</style>
</head>
<body>
</body>
</html>
本文链接