Подтвердить что ты не робот

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

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

Помимо фактического создания междоменного запроса, есть ли способ обнаружить поддержку браузера для них?

4b9b3361

Ответ 1

В будущем, полное обнаружение функции 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. Этот тест не учитывает эти ситуации.

Ответ 2

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

Ответ 3

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

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

Ответ 4

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