Perché abbiamo bisogno di JS diversi per browser diversi

6

Quali sono esattamente le cose diverse di cui dobbiamo occuparci quando scriviamo diversi file JS, come array, variabili, ecc. Esiste un libro o un sito web che spiega le differenze tra i diversi motori JS usati per i browser?

Stavo lavorando su qualcosa nella nostra applicazione e ho riscontrato un problema con JS e stavo cercando una soluzione e ho scoperto che potremmo aver bisogno di 2 JS diversi per browser diversi per ottenere la mia esatta funzionalità. Perché? È che i browser utilizzano diversi motori JS in modo che capiscano il mio JS in modi diversi?

    
posta Amar Jarubula 05.08.2011 - 16:42
fonte

3 risposte

8

Penso che il tuo problema non è che ci sono diversi motori javascript (anche se ci sono). Il problema che stai descrivendo (che hai bisogno di un codice diverso per ottenere la stessa funzionalità) è probabilmente dovuto alla comprensione da parte di vari browser dell'HTML e in particolare alla loro implementazione del DOM. Il lavoro su HTML5 si spera risolve un certo numero di aree di interesse (anche se non tutte). Viene preso direttamente dalle specifiche di bozza HTML5

1.5 Design notes

This section is non-normative.

It must be admitted that many aspects of HTML appear at first glance to be nonsensical and inconsistent.

HTML, its supporting DOM APIs, as well as many of its supporting technologies, have been developed over a period of several decades by a wide array of people with different priorities who, in many cases, did not know of each other's existence.

Features have thus arisen from many sources, and have not always been designed in especially consistent ways. Furthermore, because of the unique characteristics of the Web, implementation bugs have often become de-facto, and now de-jure, standards, as content is often unintentionally written in ways that rely on them before they can be fixed.

Penso che esprima il problema abbastanza bene.

    
risposta data 05.08.2011 - 16:53
fonte
4

Esistono due aree in cui i browser differiscono in Javascript:

  1. Lingua Javascript principale

    • Il motore JS del browser è ciò che implementa il linguaggio Javascript principale: tipi di dati, classi di base (stringa, data, matematica, ecc.)
    • Esiste in effetti uno standard aperto e le specifiche per i motori Javascript e di solito cercano di conformarsi a una versione e / o caratteristiche specifiche di Javascript. C'è anche un superset di Javascript chiamato ECMAScript di cui dovresti essere a conoscenza, e un cugino cattivo chiamato JScript.
    • Ulteriori estensioni / metodi javascript (per semplificare alcune operazioni e corteggiare gli sviluppatori) che il motore fornisce in aggiunta allo standard Javascript.
    • Bug documentati nell'implementazione. A differenza del normale software in cui i bug vengono immediatamente corretti, i bug nei motori del browser di solito non vengono risolti fino alla prossima versione. Diventano funzionalità documentate :-) Quindi il tuo sito web potrebbe funzionare in IE8 ma non in IE7 a causa di un bug documentato.
  2. Modello oggetto documento

    • DOM è il modo in cui i tag all'interno della tua pagina sono strutturati e ordinati dal browser. La tua pagina è organizzata come un albero e ogni browser avrà diverse rappresentazioni di questo albero.
    • Il Doctype determina il modello DOM e, a sua volta, il modello DOM determina la struttura, l'attraversamento, le proprietà e i metodi di un oggetto DOM (ad esempio, un nodo ottenuto dall'ID o dalla pagina o dal documento).
    • La piccola intestazione DOCTYPE che inserisci nella parte superiore del tuo sito web può cambiare il modo in cui il tuo javascript funziona anche all'interno dello stesso browser!

Questa è una panoramica molto ampia, potrei aver perso alcune stampe fini.

Ci sono due cose importanti che dovresti veramente considerare / rivedere prima di scrivere il codice Javascript:

  1. Verifica se il metodo specifico che stai utilizzando è supportato in tutti i browser. W3Schools ha una vasta documentazione della maggior parte dei metodi javascript e del loro livello di supporto del browser. Anche la Mozilla Developer Network ha alcune buone risorse.
  2. Utilizza una libreria Javascript come JQuery, Prototype, Mootools, Dojo o Ext JS. Hanno alcune API indipendenti dal browser per permetterci di fare cose come selezionare / attraversare nodi e alcune operazioni comuni. Puoi chiamare i loro metodi e si prenderanno cura delle cose dipendenti dal browser.

Modifica: relazione modificata tra Javascript e JScript da figliastra a cugino.

    
risposta data 05.08.2011 - 20:05
fonte
0

Come hanno già detto le altre risposte, la maggior parte delle incompatibilità deriva dal DOM, non dall'interprete javascript stesso. Tuttavia, Microsoft ha rilasciato un documento che mostra dove il motore JScript di IE è diverso dallo standard ECMAScript. È una buona lettura se hai mai avuto l'insonnia.

    
risposta data 05.08.2011 - 23:55
fonte

Leggi altre domande sui tag