jQuery window.location.href проблема в IE, ноль или нет объектная ошибка.Это могут быть карты Google? - PullRequest
2 голосов
/ 27 января 2011

У меня есть простой редирект в моем скрипте jQuery. Вы нажимаете на ссылку, она выполняет асинхронное сохранение, а затем отправляет пользователя на следующую страницу через window.location.href. Это прекрасно работает во всех браузерах, за исключением проблемы с IE (неожиданный сюрприз). На одной странице в IE я получаю следующую ошибку при попытке запустить скрипт

E.location.protocol is null or not an object

Странно то, что скрипт работает на других страницах. Единственное, что я вижу по-другому, это то, что страница, на которой она разбита, содержит карту Google, а другие нет.

Кроме того, кажется, что это проблема только в более поздних версиях jQuery (1.4+), но я должен использовать это для других функций.

Есть предложения? Спасибо.

Сценарий сохранения, перенаправления (который получает свое местоположение из атрибута 'goto' в теге привязки на странице):

$("#save_and_go_button").click(function(){
  showAction('Saving...');         
  $.ajax({
    type: "POST",  
    url: "/admin_and_tools/async/save.php",
    data: $("#main_form").serialize(),
    dataType: "html",
    success: function(results){
    if(results == 'success'){
     hideAction(); 
     //alert('The record has been saved.');
     document.location.href = $("#save_and_go_button").attr('goto');
    }else{
     alert('failed' + results);
    }
    }
  });        
 });

РЕДАКТИРОВАТЬ: Вот строка, которую он делает в коде jQuery:

    if(E.location.protocol!=="file:")
    try{return new E.XMLHttpRequest}catch(a){}try{
return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};

Ответы [ 3 ]

1 голос
/ 27 января 2011

Изменить document.location.href на window.location.href

Это старая проблема с IE, которая иногда возникает:)

1 голос
/ 27 января 2011

вместо

document.location.href = $("#save_and_go_button").attr('goto');

Используйте

window.location.href = $("#save_and_go_button").attr('goto');

Из того, что я понимаю document.location только для чтения .

document.location изначально был свойство только для чтения, хотя Gecko браузеры позволяют назначить его как Что ж. Для кросс-браузерной безопасности используйте window.location вместо.

0 голосов
/ 27 января 2011

Хорошо, что я сделал, чтобы обойти это, чтобы удалить это из источника jQuery 1.4.4

/*
 * Create the request object; Microsoft failed to properly
 * implement the XMLHttpRequest in IE7 (can't request local files),
 * so we use the ActiveXObject when it is available
 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
 * we need a fallback.
 */

if ( window.ActiveXObject ) {
    jQuery.ajaxSettings.xhr = function() {
        if ( window.location.protocol !== "file:" ) {
            try {
                return new window.XMLHttpRequest();
            } catch(xhrError) {}
        }

        try {
            return new window.ActiveXObject("Microsoft.XMLHTTP");
        } catch(activeError) {}
    };
}

Кажется, сейчас работает. Хотя теперь он не любит document.location.href, а работает только с window.location.href. Так что я не знаю. Это, вероятно, приведет к сбою другой части моего приложения.

Будет держать это в курсе. ОБНОВЛЕНИЕ - пока, так хорошо.

...