web-dev-qa-db-fra.com

windows.location.href ne fonctionne pas sur Firefox3

Nous avons une fonction JavaScript appelée "move" qui ne fait que "windows.location.href = any anchor". 
Cette fonction fonctionne sur IE, Opera et Safari, mais est en quelque sorte ignorée dans Firefox. La recherche sur Google ne donne pas une réponse satisfaisante pourquoi cela ne fonctionne pas. 
Un gourou de JavaScript est-il au courant de ce comportement et quelle serait la meilleure pratique pour passer à une ancre via JavaScript?

19
julio.g

Avez-vous essayé simplement d'utiliser 

window.location = 'url';

Dans certains navigateurs, window.location.href est une propriété en lecture seule et n’est pas le meilleur moyen de définir l’emplacement (même si, techniquement, il devrait vous le permettre). Si vous utilisez la propriété location seule, cela devrait être redirigé pour vous dans tous les navigateurs.

La documentation de Mozilla fournit une explication assez détaillée sur l'utilisation de l'objet window.location.

https://developer.mozilla.org/en/DOM/window.location

34
Dan Herbert

Si vous essayez d'appeler ce code javascript après un événement suivi d'un rappel, vous devez ajouter une autre ligne à votre fonction:

function JSNavSomewhere()
{
    window.location.href = myUrl;
    return false;
}

dans votre balisage de la page, le contrôle qui appelle cette fonction au clic doit renvoyer la valeur de cette fonction

<asp:button ........ onclick="return JSNavSomewhere();" />

La valeur de retour fausse annulera le rappel et la redirection fonctionnera maintenant. Pourquoi cela fonctionne dans IE? Eh bien, je suppose qu’ils pensaient différemment à la question quand ils ont privilégié la redirection par rapport au rappel.

J'espère que cela t'aides!

18
sprite

Une observation à assurer dans un tel scénario

La suite fonctionnera dans IE, mais ni dans Chrome ni dans Firefox (les versions que j'ai testées)

 window.location.href("http://stackoverflow.com");

Après travaillera tous les trois

window.location.href = "http://stackoverflow.com";
5
Lijo

Peut-être que c'est juste une faute de frappe dans votre post et pas dans votre code, mais c'est window et pas windows

4
vincent

J'ai le même problème et je suppose que cela est lié à un événement click.

J'ai une fonction qui déplace le navigateur vers une page spécifique. J'attache cette fonction à certains événements de clic: dans un bouton et dans une image. De plus, j'exécute la fonction lorsque l'utilisateur appuie sur échap (événement document onkeypress).

Les résultats sont que dans tous les cas, la fonction est appelée et exécutée, mais seulement quand il y a un clic, le navigateur va à l'adresse que je veux.

Update Je l'ai fait fonctionner! avec un 

setTimeout( "location.replace('whatever.html');", 0 );

Je ne sais pas pourquoi l'emplacement.replace ne fonctionnait pas lorsque l'événement était une pression de touche, mais avec le settimeout cela fonctionne :)

Update Le renvoi de false après l'événement lorsque vous appuyez sur échappe à la redirection Si vous renvoyez true ou rien, le navigateur ne suivra pas

2
graffic

Je ne suis pas sûr de vous suivre.
Je viens d’essayer: aller avec FF3 à Manuel de référence de Lua 5.1 (long et avec beaucoup d’ancres).
En collant javascript:window.location.href="#2.5"; alert(window.location.href); dans la barre d’adresse, je suis allé à l’ancre de droite et l’affichage de la bonne URL s’est affiché. Fonctionne aussi avec une URL complète, bien sûr.
Code alternatif: javascript:(function () { window.location.href="#2.5"; })();

Peut-être que vous avez oublié le #. Problème commun, également avec les cartes d’image.

2
PhiLho

parfois, si vous utilisezformpour publier des données, cela peut arriver ... si vous utilisez ajax, essayez de remplacer "form" par "div". Cela empêchera le comportement par défaut de la forme et fera votre code ajax.

1
libra

Vous devez ajouter return false; après le window.location.href comme mentionné ci-dessus. 

function thisWorks()
{
    window.location.href = "http://www.google.com";
    return false;
}

function thisDoesNotWork()
{
    window.location.href = "http://www.google.com";
}
1
user299580

window.location.href fonctionne correctement dans toutes les versions de Firefox, tout comme document.location.href. Je pense qu'il y a quelque chose d'autre dans votre code qui casse des choses.

déposez-le dans une page vierge. Si cela fonctionne, cela indique que quelque chose ne va pas sur votre page.

<script>
  window.location.href = 'http://www.google.com/';
</script>
1
scunliffe
window.location.hash = "#gallery";
0
Almost

Pour référence, j'ai eu le même problème.

onclick = "javascript: window.location ('example.html');" ne fonctionnait pas sous FF (dernière)

Il me suffisait de réécrire pour onclick = "javascript: window.location = 'example.html';" pour le faire fonctionner

0
Tom Toms

s'il vous plaît ajouter une balise de script javascript complète

<script type="text/javascript" language="javascript"></script>
0
Ketan Mayangar

Avez-vous essayé cela?

Response.Write("<script type='text/javaScript'> window.location = '#myAnchor'; </script>";); 
0
Mr. Muskrat

Vous pouvez également utiliser window.location.replace pour passer à une ancre sans l'enregistrer dans l'historique du navigateur:

Cet article illustre comment sauter à une ancre et utilise href comme propriété en lecture seule.

function navigateNext() 
{
    if (!window.location.hash) 
    {
        window.location.replace(window.location.href + unescape("#2"))
    } 
    else 
    {
        newItem = nextItem(window.location.hash)
        if (document.getElementById(newItem)) 
        {
            window.location.replace(stripHash(window.location) + "#" + newItem)
        } 
        else 
        {
            window.location.replace(stripHash(window.location) + "#1")
        }
    }
}
0
VonC

Je viens de surmonter le même problème. et le problème n'est pas en javascript, mais l'attribut href sur l'élément <a>.

mon code js

function sebelum_hapus()
{
var setuju = confirm ("Anda akan menghapus data...")
if (setuju)
window.location = "index.php";
}

mon html précédent était

<a href="" onClick="sebelum_hapus();">Klik here</a>

et je le mets à jour 

<a href="#" onClick="sebelum_hapus();">Klik here</a>

ou supprimer l'attribut href

j'espère que cela t'aides.

0
Awal Istirdja