web-dev-qa-db-fra.com

Problème de JSLint avec 'window' comme variable globale

J'utilise donc JSLint pour essayer de détecter les erreurs. Je désactive certaines options que je n'aime pas, mais je ne vois aucun moyen d'activer la possibilité d'utiliser la variable globale window. Eh bien, il y a l'option Yahoo Widget, mais c'est exagéré.

Quel est le problème avec l'utilisation de "fenêtre", pourquoi JSLint dirait-il que cela cause des erreurs?

75
Bjorn Tipling
/*jslint browser: true*/

Était la bonne solution à cela. Depuis le 07/07/2017, vous devez définir la directive globale manuellement. De la documentation JSLint :

La directive/* global */est utilisée pour spécifier un ensemble de globaux (généralement des fonctions et des objets contenant des fonctions) qui sont disponibles pour ce fichier. Cela était couramment utilisé dans les navigateurs pour lier les fichiers sources ensemble avant l'apparition des modules ES6. L'utilisation de variables globales est fortement déconseillée, mais malheureusement les navigateurs Web nécessitent leur utilisation. La directive/* global */ne peut être utilisée que lorsque l'option Assumer un navigateur est sélectionnée.

Vous devrez donc utiliser:

/*jslint browser */
/*global window */
135
Matt Clarkson

Faites simplement un commentaire dans votre script comme ça:

/*global window */

... your script goes here

Ce commentaire indiquera à JSLint que window est défini ailleurs.

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

JSLint reconnaît également un commentaire /* global */ Qui peut indiquer à JSLint que les variables utilisées dans ce fichier ont été définies dans d'autres fichiers. Le commentaire peut contenir une liste de noms séparés par des virgules. Chaque nom peut éventuellement être suivi de deux points et true ou false, true indique que la variable peut être affectée à ce fichier, et false indiquant que l'affectation n'est pas autorisée, ce qui est la valeur par défaut.

Lorsque vous souhaitez que la fenêtre soit globale par défaut sans avoir à appliquer le commentaire à votre script, vous pouvez ajouter predef:["window"] Au paramètre littéral de l'objet dans la fonction JSLINT de votre jslint.js fichier.

BTW, j'utilise predef:["$","window"] Pour avoir jQuery global aussi.

Mise à jour:

Cette réponse était correcte en 2009. À partir de maintenant, vous devez utiliser la solution /*jslint browser: true*/ Fournie par Matt Clarkson.

76
bjoernwibben

Pour que JSLint sache que vous reconnaissez window comme un objet global, ajoutez cette directive en haut de votre fichier:

/*global window*/

J'avais l'habitude de pouvoir utiliser:

/*jslint browser: true */

mais cela ne semble plus fonctionner. Maintenant, selon aide JSHint concernant l'option browser:

Il ne fournit pas self ou window; vous devrez demander vous-même ces alias de l'objet global redouté.

Je ne sais pas quand ce changement a été fait, mais cela m'a bloqué pendant un certain temps.

4
akivajgordon

J'ai dû utiliser les deux réponses ci-dessus sur ce code pour se débarrasser de tous les avertissements:

/*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));

Donc pour moi, c'est la solution lors de l'utilisation du site Web JSLint :

/*jslint browser:true*/
/*global window*/
3
ryanpcmcquen

Si vous ne voulez pas le spécifier dans chaque fichier, vous pouvez le définir globalement dans votre fichier de configuration eslintrc comme ceci:

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