Domanda

C'è un framework JavaScript che si concentra su l'estensione JavaScript livellando le differenze di implementazione? Non voglio dire un quadro che semplicemente fornisce la stessa funzionalità tra i vari browser, ma qualcosa che rende i browser non standard si comportano come se fossero conformi agli standard.

In sostanza voglio qualcosa che fa per JavaScript quello ie7.js fa per MSIE o cosa html5shiv fa per HTML5 elementi. O le varie soluzioni per Sockets Web o su tela.

Credo che jQuery e suoi simili potrebbe fare il trucco, ma preferirei qualcosa che mi permette di scrivere normale , conforme agli standard JavaScript come se non ci fossero differenze tra i browser.

EDIT:. Come ogni altra risposta sembra sottolineare che, sì, jQuery è JavaScript e, sì, la maggior parte dei framework JavaScript cercano di migliorare il cross-browser compability, vorrei chiarire che cosa intendo

Le differenze tra le implementazioni di JavaScript attraverso diversi browser non hanno molto a che fare con il linguaggio stesso in questi giorni. A parte un paio di built-in metodi mancanti nei browser meno recenti, i tipi per lo più si comportano allo stesso, anche. Ma ci sono ancora differenze, in particolare tra l'attuale status quo (Chrome / Firefox / Safari) e le versioni precedenti di MSIE (cioè MSIE 7). In particolare, il DOM tende ad avere caratteristiche meno-o-più sottili alla sua API.

Non voglio solo un quadro che mi permette di scrivere JavaScript che funziona su maggior parte dei browser. Quelli sono una monetina una dozzina. Voglio un sottile strato che mi permette di scrivere codice che funziona in browser moderni e browser legacy allo stesso modo. jQuery, Dojo, ecc tutti i modo andare oltre e di fornire le proprie API specifiche, invece di unificare quelli esistenti.

Dire "l'uso di jQuery" è come dire che dovrei usare Rich Ajax Platform (o di altre misure di generazione di codice) se voglio evitare differenze di rendering cross-browser. Non voglio un "sostituto", voglio un "bugfix" (non letteralmente).

EDIT2: Solo per guidare il punto a casa: io non sono alla ricerca di un qualsiasi quadro. Sono profondamente familiarità con jQuery, hanno provato YUI e attualmente sto valutando la possibilità di dare una prova Dojo. Io non solo voglio un quadro "buono". Voglio uno che si adatta la mia descrizione molto specifico. Va bene se non c'è niente di simile, anche se sarebbe interessante sapere perché non (ovvero le ragioni tecniche, non "tutti sono troppo occupati utilizzando jQuery").

È stato utile?

Soluzione

Molto tempo è passato da quando questa domanda è stato chiesto, ma forse è utile a qualcuno: di recente, un gruppo di sviluppatori da Times finanziario istituito una sorta di polyfill universale che solo le patch le parti necessarie per i diversi browser .. < a href = "http://cdn.polyfill.io/v1/docs/" rel = "nofollow"> http://cdn.polyfill.io/v1/docs/

Altri suggerimenti

Se siete come minimalista nel tuo pensiero, come suggerisce il tuo post, si potrebbe provare a compilare il proprio micro-libreria che fornisce funzionalità di cross-browser per alcuni dei divari più spesso fastidioso, come addEventListener vs. attachEvent, getTagsByClassName vs. nessun metodo, le disparità di scorrimento, dimensioni della finestra, ecc la maggior parte delle disparità JavaScript sono in realtà le disparità di metodi DOM comunque, e la lista, mentre lungo, non deve essere compilato tutto in una volta. Aggiungere le proprie funzioni di cross-browser come si presentano nella vostra codifica.

In mancanza di ciò, utilizzare jQuery.

librerie JavaScript Tutto tentativo di "livellare il campo di gioco", consentendo di scrivere cross-browser codice pulito compatibile JavaScript.

Alcuni dei più popolari:

Prototipo

MooTools

Scriptaculous

jQuery (il mio preferito)

Non v'è alcuna possibilità di raggiungere esattamente quello che vuoi. IE non esporre i prototipi di nodi DOM, in modo da avere alcun modo per estendere la loro senza farlo per ogni singolo nodo. Inoltre, di solito è (forse sempre?) Non è possibile sovrascrivere proprietà di sola lettura di host esistente oggetti come nodi DOM in IE, in modo da non essere in grado di risolvere le proprietà DOM torto-attuate in DOM stessi nodi. Anche se solo fix metodi DOM, avrai ancora bisogno di chiamare una funzione per fare questo ogni volta entrare in possesso di una nuova referenza nodo:

var el = someNode.nextSibling;
fixUp(el); // Adds missing methods to the element and fixes broken ones
var matchingEls = el.getElementsByClassName("someclass");

Per una davvero buona, spiegazione dettagliata del perché ciò che si vuole è impossibile, mi consiglia avere una lettura di questo: http://perfectionkills.com/whats-wrong-with-extending-the-dom/

Non credo che c'è un semplice "browser make si comportano correttamente" quadro -. Vanno tutti gradi abbastanza significativi al di là di questo

Detto questo, non c'è valore nel re-inventare la ruota in modo potrebbe essere saggio di investire il tempo in qualcosa come jQuery (magari utilizzando una configurazione minima personalizzato), ecc garantendo nel contempo che vi siano ricadute sensibili per gli utenti con JavaScript disabilitata.

Quando si scrive JavaScript "standard", tendo a definire le proprie funzioni che forniscono le implementazioni cross-browser di funzioni più comunemente utilizzate. addEvent e removeEvent (ci sono diverse implementazioni) sono esempi comuni di questa tecnica. Ho studiato e scritto diverse funzioni che mi permettono di chiamare una funzione per un problema specifico, piuttosto che di funzionalità riconoscere ed eseguire il codice corretto ad ogni turno.

Cose come ottenere altezza, larghezza, e offset di un elemento richiedono diverse implementazioni per diversi browser, ma può essere facilmente scritta in una funzione e riutilizzati ovunque ne avete bisogno.

Quindi, la mia "soluzione" è in gran parte una soluzione fai da te. Creare un file chiamato "utilities.js" e iniziare ad aggiungere funzioni quando ne hai bisogno. addEvent, removeEvent, e un XMLHttpRequest cross-browser sono un buon posto per iniziare. Qui, inizierò voi fuori:

function createXHR()
{
    var xhr;
    if (window.ActiveXObject)
    {
        try
        {
            xhr = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e)
        {
            alert(e.message);
            xhr = null;
        }
    }
    else
    {
        xhr = new XMLHttpRequest();
    }

    return xhr;
}

Questa funzione restituisce un oggetto XMLHttpRequest per l'uso come si vede in forma. Godetevi.

Modifica Do atto che questo approccio potrebbe teoricamente affollano lo spazio dei nomi un po '. Si può essere meglio fuori creazione di un oggetto utilities, e chiamando utilities.createXHR.

Se ti ho capito bene, http://flowjs.com/ dovrebbe essere abbastanza vicino a quello che sono alla ricerca di. E 'obiettivo principale: "FlowJS implementa il DOM Level 3 API in tutti i browser moderni"

È necessario che con jQuery. Utilizzando jQuery ti dà la possibilità di interrogare il DOM con la consistenza che manca tra le diverse implementazioni browswer. Direi che e Ajax offerte chiamate con la più grande serie di questioni che le persone affrontano in JavaScript questi giorni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top