문제

AJAX (예 : XMLHTTPREQUEST 객체)에 대한 지원을 감지하는 데 사용되는 오래된 JavaScript 함수를 업데이트하려고합니다. 나는 온라인 (SO 포함)을보고 다양한 솔루션을 찾았지만 단순히 지원을 감지하는 데 가장 효율적인 것이 확실하지 않습니다.

현재 기능은 다음과 같습니다.

    function IsSyncAJAXSupported()
    {
        var isSyncAJAXSupported = true;

        var xmlHttp = null;
        var clsids = ["Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
        for(var i=0; i<clsids.length && xmlHttp == null; i++) {
            try {
                    xmlHttp = new ActiveXObject(clsids[i]);
            } catch(e){}
        }

        if(xmlHttp == null && MS.Browser.isIE)
        {
            isSyncAJAXSupported = false;
        }
        return isSyncAJAXSupported;
    }

Firefox 3에서는 MS가 정의되지 않기 때문에 위의 오류가 발생합니다.

라이브러리를 사용하는 것이 더 좋을 것이지만 단기적으로는 옵션이 아닙니다. 우리는 IE6 이상 + 최근 버전의 Firefox, Safari/Webkit 및 Opera를 지원하고 있습니다.

xmlhttprequest 지원에 대해 True/False를 얻는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책 3

나는 이것을 생각해 냈다 :

var xhr = null;
try { xhr = new XMLHttpRequest(); } catch (e) {}
try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
return (xhr!=null);

작동하는 것 같아서 공유 할 것이라고 생각했습니다.

다른 팁

하지 않다!

또는 오히려 다른 많은 사람들이 더 잘한 일을하는 데 시간을 낭비하지 마십시오.

jquery 또는 somesuch의 근원을 잡고 그들의 방법을 "빌려"시도하십시오. 그들은 이미 가능한 한 많은 브라우저를 지원하는 데 시간을 투자했으며 (특히 jQuery의 경우) 시간을 절약하십시오.

HTH

이것에 대한 내가 선호하는 코드는 다음과 같습니다.

function CreateXMLHttpRequest()
{
  // Firefox and others
  try { return new XMLHttpRequest(); } catch (e) {}
  // Internet Explorer
  try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
  try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
  //alert("XMLHttpRequest not supported");
  // No luck!
  return null;
}

Microsoft 객체의 변형에 대한 테스트를 쉽게 추가 할 수 있습니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top