При использовании IE11 мы периодически получаем ошибку с объектом XMLHttpRequest. Наша кодовая база использует устаревшую архитектуру, поэтому этот браузер необходим.
После нажатия кнопки браузер запускает внеполосный процесс, создавая новый элемент управления ActiveX, который интегрируется с камерой для захвата изображения. Этот элемент управления работает нормально ... он позволяет оператору захватывать изображение, а содержимое Base64 изображения возвращается из элемента управления обратно в интерфейс браузера, поэтому я думаю, что мы можем исключить проблему с этим объектом .
Как только изображение возвращается в браузер, браузер выполняет асинхронный «пинг» с веб-сервером, чтобы проверить, жив ли сеанс IIS или истек (из-за внеполосного изображения процесс захвата запрещает управление браузером, пока он открыт).
Пинг до сервера успешно возвращается (и при запуске Fiddler я вижу, что ответ имеет статус 200) с ожидаемыми данными ответа:
<sessionstate>ok</sessionstate>
Существует определенная функция 'onreadystatechange', которая должна запускаться в этом ответе, и в большинстве случаев она срабатывает правильно. Тем не менее, в редких случаях он появляется, он продолжает происходить каждый раз.
Вот фрагмент кода ... мы ожидаем, что функция 'callback ()' будет вызвана при успешном ответе на Тайм-аут. asp:
XMLPoster.prototype.checkSessionAliveAsync = function(callback) {
var checkSessionAlive = new XMLHttpRequest();
checkSessionAlive.open("POST", "Timeout.asp?Action=ping", true);
checkSessionAlive.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
checkSessionAlive.onreadystatechange = function() {
if (checkSessionAlive.readyState == 4) {
if (checkSessionAlive.responseText.indexOf("expired") != -1 || checkSessionAlive.status !== 200) {
eTop.window.main.location = "timeout.asp";
return;
}
callback(checkSessionAlive.responseText);
}
}
checkSessionAlive.send();
}
Кто-нибудь видел что-нибудь подобное раньше? Я ценю, что использование устаревшего программного обеспечения не является идеальным, но в настоящее время мы ограничены его использованием.