2010-03-08 9 views
4

J'ai actuellement un problème avec firefox, où tous les autres navigateurs se comportent de la bonne façon - même IE6!redirection firefox et javascript

Ce que je veux faire est la redirection vers une sous-page mais en laissant une entrée d'historique. Il existe 2 méthodes de réécriture de l'URL pour autant que je sache:

  • window.location = "some.url"; - rediriger vers some.url avec l'entrée d'historique
  • window.location.replace ("some.url"); - rediriger sans entrée d'historique

Donc, je dois utiliser le premier et testé dans la console firebug everthing fonctionne très bien.

Maintenant, il est le genre d'une partie étrange de cette question: la même déclaration, qui a bien fonctionné dans la console ne fonctionne pas dans certains gestionnaire de rappel 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 est correctement réglée, j'ai vérifié il! Même la redirection fonctionne correctement, mais aucune entrée d'historique n'a été créée.

Des idées sur celui-là? Ça serait génial! ;)

Vive

Joe

Répondre

3

Si cela se passait pour moi, une chose que je vais essayer serait ceci:

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; 
}); 

L'idée est de mettre l'exécution de la « assigner() » appel dans un « normal "gestionnaire d'événements, dans le cas où le contexte de la fonction de réponse" getJSON "est bizarre. Cette fonction (la réponse "getJSON") sera appelée à partir du contexte du navigateur exécutant le code d'un bloc <script> qui vient d'être ajouté au DOM, donc c'est un peu inhabituel.

Je ne sais pas si ça va marcher; Je n'ai pas essayé de configurer une page de test.

+0

Cela semble étrange, mais c'est tout! Je vous remercie! Serait intéressant d'avoir un gourou jQuery dans la ligne pour comprendre ce qui se passe sur les internes! ;) – xijo

+0

Qu'est-ce que jQuery fait: il construit une balise '

7

utilisation assign():

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

REPLACE (url)
Remettez en place le document en cours avec le un à l'URL fournie. La méthode différence par rapport à l'Assign() est que après avoir utilisé le remplacer() la page actuelle ne sera pas enregistrée en session histoire, ce qui signifie que l'utilisateur ne sera pas en mesure d'utiliser le bouton Retour à à naviguer il.

+0

Salut Henchman et merci pour votre réponse, j'ai oublié de mentionner que j'ai essayé «assigner», mais cela n'a pas fonctionné aussi bien! – xijo

+0

+1 'assign()' est plus correct que 'window.location =" http: // ... "', bien que cela n'explique pas pourquoi ce qui se passe est en train de se produire. –

+0

peut-être firefox utilise .replace() lors de l'utilisation de window.location = ""?! –