Обнаружить поддержку браузером междоменных XMLHttpRequests?

StackOverflow https://stackoverflow.com/questions/1641507

Вопрос

Я работаю над некоторым Javascript, который использует возможность Firefox 3.5 для выполнения междоменных XMLHttpRequests & # 8230; Но я бы хотел изящно потерпеть неудачу, если они не поддерживаются.

Есть ли какой-нибудь способ обнаружить поддержку браузером для них, кроме собственно междоменного запроса?

Это было полезно?

Решение

Для дальнейшего использования полное обнаружение функции 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. Этот тест не учитывает эти ситуации.

Другие советы

Согласно 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 , не означает целевой сервер разрешит выполнение запроса.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top