Какая версия будет выбрана по запросу MSXML2.XMLHTTP без суффикса версии? - PullRequest
5 голосов
/ 18 ноября 2011

Вероятно, каждый веб-разработчик знаком с таким шаблоном:

var xmlHttp = null;
if (window.XMLHttpRequest) {
  // If IE7, Mozilla, Safari, and so on: Use native object.
  xmlHttp = new XMLHttpRequest();
}
else
{
  if (window.ActiveXObject) {
     // ...otherwise, use the ActiveX control for IE5.x and IE6.
     xmlHttp = new ActiveXObject('MSXML2.XMLHTTP');
  }
}

Но вопрос в том, есть ли на компьютере клиента несколько версий MSXML (скажем, 3.0, 5.0, 6.0), какая из них будет выбрана вызовом MSXML2.XMLHTTP (обратите внимание, что в конце нет суффикса версии) ? Это будет последний или - не обязательно?

И дополнительный вопрос - можно ли проверить, какая версия была выбрана?

1 Ответ

4 голосов
/ 19 ноября 2011

Как указано в Использование правильной версии MSXML в Internet Explorer :

Существует много путаницы с «независимым от версии» ProgID для MSXML. Независимый от версии ProgID всегда привязан к MSXML 3 (многие думают, что он использует последнюю версию MSXML, которая есть на коробке). Это означает, что независимый от версии ProgID и ProgID «3.0» будут возвращать один и тот же объект.

Я думаю, это должно быть более чем достаточно ясно, поскольку мы знаем, что MSXML2.XMLHTTP является независимым от версии ProgID. Я полагаю, что многие из них не программисты для Windows.

Для доказательства просто используйте regedit и выполните Find для этой строки.

Насколько я могу судить, нет свойства "version" для проверки.

...