Ajax/xmlhttprequestsupport를 감지하기위한 모범 사례
-
08-07-2019 - |
문제
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 객체의 변형에 대한 테스트를 쉽게 추가 할 수 있습니다 ...
제휴하지 않습니다 StackOverflow