2011-11-01 75 views
2

我面临的问题是,每当我关闭IE8中的安全设置时,在我的应用程序中,xmlHTTPRequest调用失败。但是当我打开它时,它的工作正常。 安全功能是:工具 - > Internet选项 - >高级 - >安全性 - >启用本机xmlHTTP支持。 如果选中,则不会发生问题,但如果未检查,则xmlHTTPReq无法向服务器发送请求(在调试器窗口中未看到cgi调用)。IE 8安全设置阻止JavaScript发送xmlHTTPRequest

所以我的问题是:是否有可能检测到这个安全设置是否启用或不使用JavaScript编程?

我对CGI调用代码是根据:

try{ 
     var xmlHttpReq; 
     var destinationURL = cgiBinPath+"helloworld.cgi?start"; 
     // IE 7+, Mozilla/Safari 
     if (window.XMLHttpRequest) { 
      xmlHttpReq=new XMLHttpRequest(); 
     } 
     //IE 5,6 
     else { 
      xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     if (xmlHttpReq.readyState == 0){ 
      xmlHttpReq.open('GET', destinationURL, true); 
      xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
      xmlHttpReq.onreadystatechange = function(){ 
       if(xmlHttpReq.readyState == 4){ 
        //Control never reaches here 
       } 
      }    
      xmlHttpReq.send(); 
     } 
    }catch(e){ 
     alert('Exception '+e); 
    } 
+0

任何有理智的人禁用此设置 – ThiefMaster

回答

2

this文章有关MSDN本地XMLHTTP看看。它还为您的问题提供了解决方案。

编辑 对不起,我没有仔细阅读文章... This一个会回答你的问题。如果可以创建XMLHttpRequest对象的实例,则必须尝试。

if (window.XMLHttpRequest) { 
    try { 
     xmlHttpReq = new XMLHttpRequest(); 
    } catch (ex) { 
     xmlHttpReq = new window.ActiveXObject("Microsoft.XMLHTTP"); 
    } 
} else { 
    //... 
} 
+0

感谢您的答复... 我已经研究了这个文章,但我觉得没有什么是有可能帮我检测到特定的安全功能已启用或不... – Ved

+0

@ adn295我编辑了我的答案 – Andreas

+0

再次感谢... !!! 我会尝试这一个,会让你知道,如果它解决了我的问题.. 一件事澄清,如果我直接写在这样的catch块内容: - xmlHttpReq =新的ActiveXObject(“Microsoft.XMLHTTP “); (没有“窗口”)它是否与你的答案有任何区别? – Ved