IE ha un parsing JavaScript più rigido di Chrome?

0

Questo non è pensato per iniziare una guerra del browser religio-tecnico - preferisco ancora Chrome, almeno per ora, ma:

A causa di un possibile problema relativo a Chrome relativo alla mia pagina Web (vedi link ), Sono passato temporaneamente a IE (10) per vedere se avrebbe anche visualizzato il valore temporale come non valido.

Tuttavia, non sono nemmeno arrivato a quel punto - IE mi ha fermato sulle mie tracce prima che potessi arrivarci; ma ho trovato che IE aveva ragione - è più particolare / preciso nel convalidare il mio codice. Ad esempio, ho preso questo da IE:

SCRIPT5007: The value of the property '$' is null or undefined, not a Function object 

... che si riferiva a questo:

<script src="/CommonLogin/Scripts/jquery-1.9.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
    // body sometimes becomes white???? with jquery 1.6.1
    $("body").css("background-color", "#405DA7");
<

Questa linea è evidenziata come colpevole:

$ ("body"). css ("background-color", "# 405DA7");

jQuery fa riferimento proprio sopra di esso - quindi perché considerava "$" non definito, specialmente quando Chrome non aveva problemi con esso ... ah! Ho guardato in quella posizione (/ CommonLogin / Scripts /) e ho visto che, abbastanza sicuro, la versione di jQuery era effettivamente jquery-1.6.2.min.js. Ho aggiunto il file jQuery aggiornato (1.9.1) e l'ho passato.

Quindi ora la domanda è: perché Chrome ignora questo? Scarica la versione di riferimento dal proprio CDN se non riesce a trovarlo nel luogo specificato?

IE ha segnalato anche altri errori dopo questo; quindi penso che forse IE è più bravo a cogliere problemi in agguato rispetto, almeno, a Chrome. Non ho ancora provato Firefox diesbzg.

    
posta B. Clay Shannon 09.08.2013 - 21:20
fonte

2 risposte

1

Stavi usando una vecchia versione di jQuery, come hai ammesso. Il rilevamento del browser in quella versione era interrotto e quindi non definiva l'oggetto jQuery globale $. Quindi quando hai provato ad usarlo, non è stato definito. Puoi inserire la versione non minificata di js (il file senza la parte 'min') e vedere dove viene definito $ (o non viene definito).

Ora ricevendo la risposta di Phil, è giusto, ma per le ragioni sbagliate. Sta dicendo che devi aspettare che dom sia pronto andando $ (document) .ready. L'unica ragione per cui devi farlo è che hai il tuo javascript in testa. Sposta tutto verso il basso (che è meglio per la velocità, l'analisi dei dom). Quindi dovresti avere questo dato che funzionerà meglio.

<html>
<head>
<title>Test</title>
</head>
<body>

    <p>Test</p>

    <script src="http://code.jquery.com/jquery-1.10.1.min.js"></script><scriptsrc="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
   <script type="text/javascript">    
       // no need to wait for ready since we are AFTER the body
     $("body").css("background-color", "#405DA7");

</body>
</html>

Altri problemi potrebbero essere che il file jquery stesso è stato inviato in modo errato tramite gzip. Un altro problema IE 11 ha. Ciò comporterebbe $ non definito.

Questo non ha nulla a che fare con $ (document) .ready

    
risposta data 28.01.2015 - 16:04
fonte
1

prima di chiamare $, che è la variabile per jquery, devi prima caricare la pagina, quindi chiamare qualsiasi oggetto jquery:

  $(document).ready(function () {

      $("body").css("background-color", "#405DA7");

    });

"Le istruzioni Javascript vengono eseguite immediatamente dal browser e non quando il DOM è pronto." - Vedi Pro jquery di Adam Freeman [http://www.apress.com/9781430240952] pagina 107

Se si esegue quanto segue in Firefox, Chrome e IE, funziona. Lo sfondo cambia

<html>
<head>
<title>Test</title>
<script src="http://code.jquery.com/jquery-1.10.1.min.js"></script><scriptsrc="http://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
   <script type="text/javascript">    
              $(document).ready(function () {

                   $("body").css("background-color", "#405DA7");

              });
   </script>    
</head>
<body>

    <p>Test</p>
</body>
</html>

Se rimuovi la linea:         $ (document) .ready (function () {..} e solo avere:

$("body").css("background-color", "#405DA7");

Non funzionerà.

    
risposta data 09.08.2013 - 22:30
fonte

Leggi altre domande sui tag