2009-09-10 1 views
75

Quindi sto utilizzando JSLint per provare a rilevare gli errori. Disattivo alcune opzioni non mi piace, ma non vedo alcun modo per consentire di essere in grado di utilizzare la variabile globale window. Bene, c'è l'opzione Yahoo Widget, ma è eccessivo.Problema di JSLint con 'finestra' come variabile globale

Qual è l'accordo con l'uso di "finestra", perché JSLint potrebbe dire che sta causando errori?

+0

Come si usa la finestra? Probabilmente si potrebbe rimuovere la dipendenza da esso, anche se la soluzione di bjoernwibben qui sotto sembra fare il lavoro. –

+0

Beh, lo stavo usando per window.setTimeout. So che non ne ho bisogno e probabilmente non dovrebbe, ma in alcuni punti in cui lavoro con più finestre in un'estensione per Firefox, avrei bisogno di accedervi. Grazie! –

+0

Commento obbligatorio [JSHint] (http://www.jshint.com). Affronta alcuni di questi problemi JSLint, ed è molto più IMHO. ;) – DondeEstaMiCulo

risposta

134
/*jslint browser: true*/ 

È la soluzione corretta a questo.

2017-07-07: documentazione JSLint ora dice:

browser ... Essa non fornisce sé o finestra; dovrai richiedere questi alias del temuto oggetto globale tu stesso.

e

Il/globale/direttiva può essere utilizzata solo quando l'assumere un'opzione di browser è selezionata.

Quindi sarà ora necessario utilizzare:

/* jslint browser */ 
/* global window */ 
+0

@bjoernwibeen ha detto nella sua risposta che questa è la soluzione corretta al momento. Nota che ci sono due anni di differenza in entrambe le nostre risposte. –

+1

La documentazione ufficiale a supporto di ciò è disponibile all'indirizzo: http://www.jslint.com/lint.html#options 'Alcune globali possono essere predefinite per te. Selezionare l'opzione Assume un browser (browser) per predefinire le proprietà globali standard fornite dai browser Web, come documento e addEventListener. Ciò include anche la finestra. –

+0

Contrassegnato come la risposta corretta. Avrei dovuto aggiungere il commento alla domanda in modo da ottenere un avviso che non è stato risolto in questi 3 anni di ritardo. : P –

76

Basta fare un commento nello script del genere:

/*global window */ 

... your script goes here 

Questo commento dirà JSLint che window è definita da qualche altra parte.

See: http://www.JSLint.com/lint.html,

JSLint riconosce anche un commento /* global */ che può indicare a JSLint che le variabili utilizzate in questo file sono state definite in altri file. Il commento può contenere un elenco di nomi separati da virgole. Ogni nome può essere opzionalmente seguito da due punti e vero o falso, true indica che la variabile può essere assegnata da questo file e false che indicano che l'assegnazione non è consentita quale è l'impostazione predefinita.

Quando si desidera finestra per essere globale di default senza dover applicare il commento allo script, è possibile aggiungere predef:["window"] al parametro letterale oggetto all'interno della funzione JSLINT del file locale jslint.js.

BTW, sto usando predef:["$","window"] per avere jQuery globale pure.

Aggiornamento:

La risposta è stata corretta nel 2009. A partire da ora si dovrebbe utilizzare la soluzione /*jslint browser: true*/ fornita da Matt Clarkson.

+0

Grazie a quello ha funzionato. –

+5

Anche se questo lavoro non è la risposta "giusta". 'browser: true' è. –

+0

Come menzionato nella risposta sopra, la risposta di Matt Clarkson è ora quella corretta. – superluminary

3

ho dovuto usare entrambe le risposte di cui sopra su questo codice per sbarazzarsi di tutte le avvertenze:

/*jslint browser:true*/ 
/*global window*/ 
// eventBoiler v0.1.1 by @ryanpcmcquen 
// https://github.com/ryanpcmcquen/eventBoiler 
(function (win, doc) { 
    'use strict'; 
    win.eventBoiler = function (selector, typeOfEvent, func) { 
     doc.querySelector(selector).addEventListener(typeOfEvent, func); 
    }; 
    win.eventBoiler.all = function (selectors, typeOfEvent, func) { 
     Array.prototype.slice.call(doc.querySelectorAll(selectors)).map(function (i) { 
      i.addEventListener(typeOfEvent, func); 
     }); 
    }; 
}(window, document)); 

Quindi per me , questa è la soluzione quando si utilizza il JSLint website:

/*jslint browser:true*/ 
/*global window*/ 
4

Per lasciare JSLint sapere che si riconosce window come un oggetto globale, aggiungere questa direttiva nella parte superiore del file:

/*global window*/ 

ho usato per essere in grado di utilizzare:

/*jslint browser: true */ 

, ma questo non è più sembra funzionare. Ora, secondo il JSHint help per quanto riguarda l'opzione browser:

Esso non fornisce self o window; dovrai richiedere questi alias del temuto oggetto globale tu stesso.

Non sono sicuro di quando è stata apportata questa modifica, ma mi ha bloccato per un po '.

1

Se non volete specificare questo in ogni file è possibile impostare a livello globale nel vostro eslintrc file di configurazione in questo modo:

"globals": { 
    "window": true, 
}