问题是这样的:
现在利用vista下的certenroll在客户端申请证书:
代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="VistaCert.aspx.cs" Inherits="VistaCert" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">
    <title>Certificate Request test</title>
    <object id="objCertEnrollClassFactory" classid="clsid:884e2049-217d-11da-b2a4-000e7bbb2b09" ></object>     
</head>
 
<body >
    <form id="form1" runat="server">
    <div>
        <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" />
   
        <input id="Button2" type="button" value="button" onclick="return Button2_onclick()" />
    </div>
    </form>     <script language="javascript" type="text/javascript">
      //CreateRequest();
    function CreateRequest()                         
    {
     if(typeof(objCertEnrollClassFactory) != "object")
           {
           alert("objectnull1");
           return;
           }
      
      if( (objCertEnrollClassFactory.object == null) )
          {
           alert("objectnull2");
           return;
           }
      
               
      document.write("<br>Create Request...");                            try {           
       alert("try");             
        var objCSP = objCertEnrollClassFactory.CreateObject("X509Enrollment.CCspInformation");
        alert("trytre");        
        var objCSPs = objCertEnrollClassFactory.CreateObject("X509Enrollment.CCspInformations");
        var objPrivateKey = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509PrivateKey");
        var objRequest = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509CertificateRequestPkcs10")
        var objObjectIds = objCertEnrollClassFactory.CreateObject("X509Enrollment.CObjectIds");
        var objObjectId = objCertEnrollClassFactory.CreateObject("X509Enrollment.CObjectId");
        var objX509ExtensionEnhancedKeyUsage = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509ExtensionEnhancedKeyUsage");
        var objExtensionTemplate = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509ExtensionTemplateName")
        var objDn = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX500DistinguishedName")
        var objEnroll = objCertEnrollClassFactory.CreateObject("X509Enrollment.CX509Enrollment")         objCSPs.Add(objCSP);        //  Provide key container name, key length and key spec to the private key object
        objPrivateKey.ProviderName = " My Cryptographic Service Provider ";
     
objPrivateKey.ProviderType = 1; objPrivateKey.KeySpec= 1;
//// objPrivateKey.GenKeyFlags = 1;
        objPrivateKey.KeyUsage = 1; //0x4001;
       objPrivateKey.ContainerName = "itest";
        objPrivateKey.Length = 1024;
                
 
               objRequest.InitializeFromPrivateKey(1, objPrivateKey, ""); // context user = 1        // 1.3.6.1.5.5.7.3.2 Oid - Extension
        objObjectId.InitializeFromValue("1.3.6.1.5.5.7.3.2");
        objObjectIds.Add(objObjectId);
        objX509ExtensionEnhancedKeyUsage.InitializeEncode(objObjectIds);
        objRequest.X509Extensions.Add(objX509ExtensionEnhancedKeyUsage);        
     
        objDn.Encode("CN=alejacma", 0); 
        objRequest.Subject = objDn;        
        objEnroll.InitializeFromRequest(objRequest);
        var pkcs10 = objEnroll.CreateRequest(3); 
        document.write("<br>" + pkcs10);
        document.write("<br>The end!");      }
      catch (ex) 
      {
alert("7");
        document.write("<br>" + ex.description);
        return false;
      }      return true;
    }      
    
   CreateRequest();
  
function Button1_onclick()
{
}function Button2_onclick()
 {
 }  </script>    
  </body> 
</html>
就是说网页还没有加载完那么这样申请时可以的但是如果我把最后的CreateRequest();(倒数第10行)放入
function Button1_onclick()
{}

就是想要按下button1才去申请证书

function Button1_onclick()
{
CreateRequest();
}那么certenroll就会报 不支持此对象或方法 非常奇怪 望高手解答 非常感谢