2009-10-20 24 views
17

Mam następujące biblioteki JavaScript załadowane do mojej strony.jQuery działa w Firefoksie, gdy Firebug działa, nie działa, gdy Firebug NIE działa

<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> 

Mam elementu div, który chcę, aby umieścić je w:

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

Mam ten link:

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

Wreszcie, mam następujący kod jQuery:

<script> 

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

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

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

    console.log(url); 

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

To wszystko działa w Safar ja. Najdziwniejsza część tej historii jest taka, że ​​działa tylko w Firefoksie, gdy Firebug jest włączony. Kiedy Firebug NIE jest włączony, strona wydaje się być ładowana dynamicznie, ale wtedy strona ładuje rules.html i przełącza się na nią, co nie jest moim pożądanym celem.

Oczywiście, nic z tego nie działa w IE8.

Co robię źle?

Odpowiedz

29

Lepiej owinąć cały swój

console.log(...) 

do

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

+1 Podobała mi się ta odpowiedź, ponieważ oferowała obejście, które umożliwiłoby prawidłowe funkcjonowanie obu scenariuszy. –

+4

Robię coś podobnego, gdy mam funkcję o nazwie log(), która sprawdzi, czy window.console jest dostępna, a jeśli tak, zaloguj się do polecenia. – Shard

+0

Uratowałem mój dzień. W Firefoksie 4.0 to dobrze :) –

11

Wyjmij plik console.log, jest niezdefiniowany, gdy firebug nie jest uruchomiony.

+0

Potrzebowałem również dodać: return false; na końcu mojej funkcji. W przeciwnym razie przeglądarka załadowałaby rules.html – Tylo

+0

Tak, obiekt konsoli istnieje tylko w Safari i Firefox, gdy Firebug jest włączony. Musisz rozebrać wywołanie console.log. – ohdeargod

+0

I bardziej ogólnie: spójrz w konsolę błędów, aby rozwiązać problemy, powiedziałabyś, że nie ma pliku console.log(). – Nickolay

0

Ponadto istnieje ciekawy projekt o nazwie fauxconsole: Symulowanie Firebug, Safari czy Opera konsoli debugowania w programie Microsoft Internet Explorer z konsoli Faux

1

Sprawdź, czy masz konsolę, zanim spróbujesz jej użyć.

Bind zmienna logiczna tak:

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

i sprawdzić przed napisaniem do konsoli:

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

ten sposób po włączeniu Firebug dostać wiadomości debugowania i kiedy go włączyć Twoje skrypty nadal działają.

1

Można użyć następującego kodu do maskowania brakujących funkcji rejestrowania.

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() {} 
}