2010-01-20 3 views
0

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

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 ...

+1

Вы проектируете для IE4 и * Netscape * ?? – nickf

ответ

4

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

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

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

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

+0

Исправлена ​​ошибка setTimeOut. IE явно не обновлял URL-адрес с помощью location.href, хотя я думаю, что URL-адрес мог бы быть действительно изменен, но вы не можете его добавить или увидеть новый URL-адрес (странно). Это было внутри события jQuery click, но я отменял событие event.preventDefault, и я также попытался вернуть false. – johna

0

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

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

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

Я не помню, что document.location все еще действителен в IE6, хотя (я ушел из IE6 yonkers ago).