Обнаружить поддержку браузером междоменных XMLHttpRequests?
-
08-07-2019 - |
Вопрос
Я работаю над некоторым 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.