новый XMLHttpRequest в IE9 вызывает ошибку времени выполнения JScript: объект не поддерживает это свойство или метод - PullRequest
4 голосов
/ 19 декабря 2011

происходит только в IE9 (в Firefox работает нормально) попытался снизить настройки безопасности до минимума. я не уверен насчет других версий IE, потому что у меня установлено 9.

Среда: asp.net 3.5 webforms скриптовые фреймворки: Anthem.NET, jquery

скрипт гимна пытается создать экземпляр XMLHttpRequest и завершается неудачно я попытался просто создать его сам на странице и имел ту же ошибку. В том же проекте я создал новую HTML-страницу, и она работала нормально.

так что это может быть какой-то сценарий сговора ...

Любой

Вот исходный код, который дает сбой (в строке 3), взятый из среды Anthem.NET, которая работает в системе:

function Anthem_GetXMLHttpRequest() {
if (window.XMLHttpRequest) {  // <-- This passes as True! window.XMLHttpRequest is {...}
    return new XMLHttpRequest(); // <---- Fails here
} else {
    if (window.Anthem_XMLHttpRequestProgID) {
        return new ActiveXObject(window.Anthem_XMLHttpRequestProgID);
    } else {
        var progIDs = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
        for (var i = 0; i < progIDs.length; ++i) {
            var progID = progIDs[i];
            try {
                var x = new ActiveXObject(progID);
                window.Anthem_XMLHttpRequestProgID = progID;
                return x;
            } catch (e) {
            }
        }
    }
}
return null;

}

вот значение Window.XMLHttpRequest: enter image description here

и вот картина неудачи, которую я создал сам: enter image description here

Обновление: Только что выяснил, что работает в режиме совместимости! и когда я возвращаюсь в нормальный режим, он снова работает! Кстати: режим документа находится в режиме Quirks (который используется по умолчанию)

Ответы [ 3 ]

4 голосов
/ 18 января 2013

Недавно я столкнулся с проблемой и обнаружил, что если поместить код, который создает запрос XMLHttpRequest, в функцию, которая запускается при загрузке окна, то она каждый раз работает нормально.Попробуйте поместить свой код в это:

window.onload = function() {
    var lala = new XMLHttpRequest();
}

Или, если вы используете jquery:

$(function() {
    var lala = new XMLHttpRequest();
});
1 голос
/ 10 декабря 2014

Хотите верьте, хотите нет, т.е. 9 НЕ на самом деле поддерживает XMLHttpRequest (вы можете изменить некоторые настройки в настройках вашего Интернета как конечный пользователь, но я уверен, что это не будет приемлемым ответом для вашегобосс).

Для ie9 вы должны сделать это:

var xmlhttp;
if (ie9)
{
    xmlhttp=new XDomainRequest();
}
else
{
    xmlhttp=new XMLHttpRequest();
}

Затем, где вы обычно будете применять (для обычных браузеров):

xmlhttp.onreadystatechange=function()
{
     if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
          // do your thing
     }
};

ВыВам придется сделать это вместо (для ie9):

if (this.ie9)
{
     xmlhttp.onload = function()
     {
         // do your ie9 thing
     };
}
1 голос
/ 19 декабря 2011

В IE (window#XMLHttpRequest равно undefined, поскольку это глобальный Object для конкретного браузера (то есть для браузеров, совместимых с W3C, таких как браузеры на основе Mozilla или Webkit, а также Opera).

Я не совсем понимаю, почему

if(window.XMLHttpRequest)

не оценивается как false, но ничего вы там не можете сделать.

Однако вы можете добавить перед этим вилку кода для проверки window#ActiveXObject (т. Е. Internet Explorer)

if(!! window.ActiveXObject) { // same as typeof window.ActiveXObject !== "undefined"
    /* use MSXML */
}
else if(!! window.XMLHttpRequest) {
    /* use XMLHttpRequest */
}
else throw Error("Browser does not support XHR.") ;

Если вы не можете изменить исходный код на этом этапе, и проблема не устранена, вы можете захотеть изменить каркас.


Редактировать : Я только что заметил, что вы говорили, что проблема обнаруживается в IE 9. На самом деле это не должно быть так, поскольку IE 9 поддерживает XMLHttpRequest Object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...