Обнаружить поддержку браузером междоменных XMLHttpRequests? - PullRequest
43 голосов
/ 29 октября 2009

Я работаю над некоторым Javascript, который использует возможность Firefox 3.5 для выполнения междоменных запросов XMLHttp… Но я бы хотел изящно завершить работу, если они не поддерживаются.

Можно ли как-нибудь определить, поддерживает ли их браузер их поддержку?

Ответы [ 4 ]

70 голосов
/ 01 октября 2011

Для дальнейшего использования полное обнаружение функции CORS должно выглядеть примерно так:

//Detect browser support for CORS
if ('withCredentials' in new XMLHttpRequest()) {
    /* supports cross-domain requests */
    document.write("CORS supported (XHR)");
}
else if(typeof XDomainRequest !== "undefined"){
  //Use IE-specific "CORS" code with XDR
  document.write("CORS supported (XDR)");
}else{
  //Time to retreat with a fallback or polyfill
  document.write("No CORS Support!");
}

Вы можете попробовать этот тест вживую, используя JSBin и увидеть правильный ответ в IE, Firefox, Chrome, Safari и Opera.

В не браузерных средах есть некоторые крайние случаи, когда поддерживает междоменный XHR, но не XHR2 / CORS. Этот тест не учитывает эти ситуации.

35 голосов
/ 29 октября 2009

Согласно http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/ вы можете использовать:

if ('withCredentials' in new XMLHttpRequest()) {
    /* supports cross-domain requests */
}

(Примечание: на этой странице есть комментарий, что Chrome 2 не проходит этот тест [хотя он поддерживает междоменные запросы]. Я тестировал Chrome 3, и тест сейчас проходит.)

Имейте в виду, что тот факт, что браузер может поддерживать междоменный API 1009 *, не означает, что целевой сервер разрешит выполнение запроса.

4 голосов
/ 04 мая 2010

Возможно, вы захотите взглянуть на EasyXDM , который объединяет кросс-браузерные особенности и предоставляет простой в использовании API для взаимодействия в клиентском скрипте между различными доменами с использованием наилучшего доступного механизма для этого браузера (например, postMessage , если доступно, другие механизмы, если нет).

Очевидно, что библиотека решила проблему обнаружения возможностей браузера, поэтому вы можете воспользоваться их опытом. : -)

1 голос
/ 04 мая 2010

IE8 также имеет XDomainRequest объект, который можно использовать для извлечения RSS в виде текста, который впоследствии может быть проанализирован в DOM.

...