2010-03-08 3 views
4

У меня в настоящее время проблема с firefox, где все остальные браузеры ведут себя правильно - даже IE6!redfox и javascript redirection

Что я хочу сделать, это перенаправление на подстраницу, но оставив запись истории. Существует 2 метода переписывания URL-адреса, насколько мне известно:

  • window.location = "some.url"; - перенаправить на some.url с записью истории
  • window.location.replace ("some.url"); - перенаправление без ввода истории

Поэтому я должен использовать первый и протестирован в консоли firebug, когда-либо работающий отлично.

Теперь есть вид странной части этого вопроса: то же самое утверждение, что работал отлично в консоли не в какой-то Jquery обратного вызова обработчика:

jQuery("#selector").bind("submit", function() { 
    $.getJSON("some_cool_json", function(response) { 
    var redirect_path = response.path; 
    window.location = redirect_path; 
    }); 
    return false; 
}); 

где response_path установлен правильно, я проверил Это! Даже перенаправление работает правильно, но запись истории не создается.

Любые идеи по этому вопросу? Было бы замечательно! ;)

Приветствия

Джо

ответ

3

Если это происходило со мной, вещь, которую я хотел бы попробовать бы это:

jQuery("#selector").bind("submit", function() { 
    $.getJSON("some_cool_json", function(response) { 
    var redirect_path = response.path; 
    setTimeout(function() { 
     window.location.assign(redirect_path); 
    }, 1); 
    }); 
    return false; 
}); 

Идея заключается в том, чтобы поставить выполнение «Назначение()» называют в «нормальный «обработчик событий», если есть что-то в контексте функции ответа «getJSON», это странно. Эта функция (ответ «getJSON») вызывается из контекста браузера, выполняющего код блока <script>, который только что добавлен в DOM, поэтому он, по крайней мере, немного необычен.

Я не знаю, что это сработает; Я не пробовал настраивать тестовую страницу.

+0

Звучит странно, но вот оно! Спасибо! Было бы интересно иметь гуру jQuery в строке, чтобы понять, что происходит на внутренней стороне! ;) – xijo

+0

Что делает jQuery: он создает тег '

7

использование assign():

window.location.assign("http://..."); 

заменяющие (URL)
Заменить текущий документ с один на предоставленному URL. отличия от метода правопреемника() является , что после использования замены() текущая страницы не будет сохраняться в сессии историй, то есть пользователь не будет в состоянии использовать кнопку Назад Перейдите к Это.

+0

Hi Henchman и спасибо за ваш ответ, я забыл упомянуть, что я попробовал «назначить», но это не сработало! – xijo

+0

+1 'assign()' вернее, чем 'window.location =" http: // ... "', хотя это не объясняет, почему происходит то, что происходит. –

+0

возможно firefox используется .replace() при использовании window.location = ""?! –