IE перенаправление JavaScript - PullRequest
0 голосов
/ 20 января 2010

У меня есть функция javascript, которая перенаправляет пользователя на страницу сравнения.Это выглядит так ...

redirect : function(url)
{
    if(!url)
        return false;

    alert(url);
    if (this.browserClass.isW3C) //IE 6.X comes here
    {
        window.location.href = url;
    }
    else if(this.browserClass.isIE4)
    {
        window.location.href = url;
    }
    else if (this.browserClass.isNN4)
    {
        window.location = url;
    }
    else
    {
        window.location = url;
    }
    return false;
},

Но проблема в том, что это не работает в IE (Internet Explorer 6.X).После непродолжительной битвы я увидел, что IE перенаправлял меняющий код на этот -

    if (this.browserClass.isW3C)
        setTimeout("location.href = '" +url+"'", 0);

Проблема решенаНо что здесь происходит?Может ли кто-нибудь научить меня?или это просто одна из тех умопомрачительных особенностей IE ...

Ответы [ 2 ]

4 голосов
/ 20 января 2010

Эта функция - пустая трата времени. Назначение location.href одинаково хорошо работает во всех существующих в настоящее время браузерах. this.browserClass.isNN4 - намек на то, что этот код беспокоится о вещах, которых нет в этом столетии. Как будто вонючий старый браузер нюхает не достаточно плохо. (Во всяком случае, даже в Netscape оба эти задания работали.)

setTimeout("location.href = '" +url+"'", 0);

Старайтесь не передавать строки в setTimeout, это то же самое, что и eval со всеми теми же проблемами (например, ваш URL содержит апостроф ... boom). Передайте функцию, встроенную при необходимости (setTimeout(function() { location.href= url; }, 0);).

Однако для меня это пахнет тем, что вы захватываете событие click или mousedown по ссылке, а не отменяете событие (возвращая false из обработчика события). Следовательно, ссылка после действия по умолчанию может происходить и может, в зависимости от браузера, переопределять навигацию location.href.

0 голосов
/ 20 января 2010

Если вас не беспокоит история ведения веб-браузера (кнопки «назад» и «вперед»), просто используйте функцию javascript location.replace(url), иначе вы всегда можете использовать атрибут location.href.

Источник: http://www.roseindia.net/javascript/javascript-location-replace.shtml

window.location (если я правильно помню) - это объект, а не строковый атрибут.

Я не помню, действует ли document.location в IE6, хотя (явыйти из IE6 назад).

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