2008-11-08 9 views
19

Abbiamo una funzione JavaScript denominata "move" che fa solo "windows.location.href = qualsiasi ancora data".
Questa funzione funziona su IE, Opera e Safari, ma in qualche modo viene ignorata in Firefox. La ricerca su Google non produce una risposta soddisfacente perché non funziona.
Qualche guru JavaScript è a conoscenza di questo comportamento e quale sarebbe la migliore pratica per passare a un'ancora tramite JavaScript?windows.location.href non funziona su Firefox3

+1

Ho appena provato a installare "window.location.href" sulla pagina di test di W3School e ha funzionato. Sei sicuro che nient'altro potrebbe causare il problema? http://www.w3schools.com/js/tryit.asp?filename=tryjs_location –

+0

Grazie per il tuo post. Bene, ho provato a semplificare lo scenario. L'immagine intera è che chiamiamo il javascript da Response.Write, in un evento proveniente da una griglia DevExpress. Questo sarebbe l'intero contesto del problema. Provare solo con window.location non ha funzionato. –

+0

non sono sicuro se ottengo questo bit "chiamando da Response.Write" bit. Se si "echo" -in esso all'output, racchiuso in un tag

2

Non sono sicuro di seguirti.
Ho appena provato: andare con FF3 a Lua 5.1 Reference Manual (lungo e con molti ancore).
Incollando javascript:window.location.href="#2.5"; alert(window.location.href); nella barra degli indirizzi, sono andato all'ancora giusta e ha visualizzato l'URL corretto. Funziona anche con un URL completo, ovviamente.
Codice alternativo: javascript:(function() { window.location.href="#2.5"; })();

Forse hai dimenticato il #. Problema comune, anche con mappe di immagini.

+0

Grazie per il tuo post. Ho impostato anche il carattere #. Puoi provare senza la frase "alert"? Se metto un avviso, in qualche modo funziona, se lo rimuovo, non lo fa. –

+1

Se lo rimuovi nel bookmarklet, devi sostituirlo con void (0) o inserire tutto il materiale in una chiamata di funzione: il bookmarklet non deve avere un valore finale. – PhiLho

0

Si potrebbe anche usare window.location.replace per passare a un punto fermo, senza registrarlo nella cronologia del browser:

Questo article illustra come saltare ad un'ancora e utilizza href come proprietà di sola lettura.

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

Perché non solo 'window.location.hash =" 1 "'? Tutte le sostituzioni e le spellature non sono necessarie. –

1

window.location.href funziona bene in tutte le versioni di Firefox, come fa document.location.href penso che ci sia qualcosa di diverso nel codice che sta rompendo le cose.

rilasciare questo in una pagina vuota, se funziona, indica che c'è qualcos'altro di sbagliato sulla tua pagina.

<script> 
    window.location.href = 'http://www.google.com/'; 
</script> 
0

Hai provato questo?

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

forse è solo un errore di battitura nel tuo post e non nel codice, ma è finestra e non finestra s

2

Ho lo stesso problema e credo che questo è legato alla a clic evento.

Ho una funzione che sposta il browser in una pagina specifica. Allego questa funzione ad alcuni eventi click: in un pulsante e in un'immagine. Inoltre, eseguo la funzione quando l'utente fa clic su escape (document onkeypress event).

I risultati sono che in tutti i casi la funzione viene richiamata ed eseguita, ma solo quando c'è un clic il browser va all'indirizzo desiderato.

Aggiornamento ho ottenuto che funziona! con un

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

Non so perché il location.replace non funzionava quando l'evento è stato pressione di un tasto, ma con la setTimeout funziona :)

Aggiornamento Tornando falso dopo la evento quando si preme escape fa funzionare il reindirizzamento. Se si restituisce vero o nulla il browser non seguirà

-1

Un'altra opzione:

document.location.href ="..." 
0
window.location.hash = "#gallery"; 
18

Se si sta tentando di chiamare questo codice javascript dopo un evento che è seguito da una richiamata è necessario aggiungere un'altra linea alla funzione:

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

nel markup per la pagina, il controllo che chiama questa funzione sullo scatto deve restituire il valore di questa funzione

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

Il valore di ritorno falso annullerà la richiamata e il reindirizzamento funzionerà ora. Perché funziona in IE? Beh, immagino che stessero pensando in modo diverso al problema quando hanno dato la priorità al reindirizzamento sul callback.

Spero che questo aiuti!

+1

grazie! questo problema mi stava facendo impazzire finché non ho trovato questo! +1 a te per aver salvato la mia attaccatura dei capelli. –

+1

Grazie per questo, mi ha salvato un po 'di tempo. IE6 ha sempre bisogno di un calcio speciale nei pantaloni. – Yoshi

+0

! +1 Grazie risolto il mio problema – SivaRajini

0

si prega di aggiungere piena tag script javascript

<script type="text/javascript" language="javascript"></script>
+2

Non c'è davvero bisogno di usare language = "javascript" più .. – Amalgovinus

1

Hai avuto modo di aggiungere return false; dopo il window.location.href come menzionato sopra.

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

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

Per riferimento ho avuto lo stesso problema.

onclick = "javascript: window.location ('example.html');" non ha funzionato sotto FF (ultimo)

Ho appena dovuto riscrivere su onclick = "javascript: window.location = 'example.html';" per farlo funzionare

0

Ho appena superato lo stesso problema. e il problema non è in javascript, ma l'attributo href sull'elemento <a>.

mio codice js

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

mio precedente formato HTML è stato

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

ed aggiorno a

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

o rimuovere l'attributo href

speranza che questo aiuti.

5

Un'osservazione al fine di garantire in un tale scenario

In seguito lavorerà in IE, ma né in ChromeFirefox (le versioni che ho provato)

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

In seguito lavorerà tutti e tre

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

a volte se si utilizza modulo per inviare dati, questo può accadere. se stai usando unjax, prova a cambiare 'form' in 'div'. questo impedirà il comportamento predefinito di form e farà il tuo codice Ajax.

0

window.location.assign ("collegamento alla pagina successiva") dovrebbe funzionare in entrambi i browser (chrome e firefox).

window.location.assign("link to next page")