2009-10-20 11 views
17

Ho le seguenti librerie Javascript caricate per la mia pagina.jQuery funziona in Firefox quando Firebug è in esecuzione, non funziona quando Firebug NON è in esecuzione

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
<script type="text/javascript" src="http://cdn.jquerytools.org/1.1.2/jquery.tools.min.js"></script> 
<script type="text/javascript" src="./js/jquery.scrollTo-min.js"></script> 

ho l'elemento div che voglio metterli in:

<div class="content" id="content"> 
</div> 

ho questo link:

<a id="changeText" href="rules.html">Click to change</a> 

Infine, ho il seguente codice jQuery:

<script> 

$(document).ready(function() { 
$("#changeText").click(function(){ 

    var url = $(this).attr("href"); 

    $("#content").load(url); 

    console.log(url); 

    $.scrollTo("0%", 400); 
}); 
}); 
</script> 

Tutto questo funziona in Safar io. La parte più strana della storia è che funziona solo in Firefox quando Firebug è attivo. Quando Firebug NON è attivo, la pagina sembra essere caricata dinamicamente, ma poi la pagina carica rules.html e passa ad essa, che non è il mio obiettivo desiderato.

Inoltre, naturalmente, nessuno di questi funziona in IE8.

Cosa sto sbagliando?

risposta

29

Faresti meglio avvolgere tutto il tuo

console.log(...) 

in

if (window.console) { 
    console.log(...); 
} 
+0

+1 Mi è piaciuta questa risposta in quanto offriva una soluzione che avrebbe consentito a entrambi gli scenari di funzionare correttamente. –

+4

Faccio qualcosa di simile dove ho una funzione chiamata log() che controllerà se window.console è disponibile e in tal caso registri il comando. – Shard

+0

Salvato il mio giorno. Va bene su Firefox 4.0 però :) –

11

Estrarre il file console.log, non è definito quando firebug non è in esecuzione.

+0

Ho anche bisogno di aggiungere: return false; alla fine della mia funzione. In caso contrario, il browser caricherà le regole.html – Tylo

+0

Sì, l'oggetto console esiste solo in Safari e Firefox quando Firebug è attivo. È necessario rimuovere la chiamata console.log. – ohdeargod

+0

E più in generale: cerca nella console degli errori di eseguire il debug dei problemi, ti avrebbe detto che non c'era console.log(). – Nickolay

0

Inoltre v'è il progetto interessante chiamato fauxconsole: Simulazione di una Firebug, Safari o Opera debug console in Microsoft Internet Explorer con Faux Console

1

Verificare se si dispone di una console prima di provare a utilizzarlo.

associare una variabile booleana così:

var hasConsole = (typeof console != 'undefined' && typeof console.log != 'undefined'); 

e controllare prima di scrivere alla console:

if (hasConsole) { 
     console.log("This is safe."); 
    } 

In questo modo quando si accende Firebug si ottiene i messaggi di debug e quando lo si accende i tuoi script funzionano ancora.

1

È possibile utilizzare il seguente codice per mascherare le funzioni di registrazione mancanti.

if (typeof console === "undefined") { 
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", 
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; 

    window.console = {}; 
    for (var i = 0; i < names.length; ++i) 
     window.console[names[i]] = function() {} 
}