2009-09-10 14 views
75

Así que estoy usando JSLint para tratar de detectar errores. Desactivo algunas opciones que no me gustan, pero no veo ninguna forma de permitir el uso de la variable global window. Bueno, existe la opción de Widget de Yahoo, pero eso es excesivo.Problema de JSLint con 'ventana' como variable global

¿Cuál es el problema con el uso de 'ventana', ¿por qué JSLint dice que está causando errores?

+0

¿Cómo se utiliza la ventana? Probablemente puedas eliminar la dependencia sobre él, aunque la solución de bjoernwibben a continuación parece hacer el trabajo. –

+0

Bueno, lo estaba usando para window.setTimeout. Sé que no tengo que hacerlo y probablemente no debería hacerlo, pero en algunos lugares donde trabajo con varias ventanas en una extensión de Firefox necesitaría acceder a él. ¡Gracias! –

+0

Obligatorio [JSHint] (http://www.jshint.com) comentario. Aborda algunos de estos problemas JSLint, y es mucho más bonito en mi humilde opinión. ;) – DondeEstaMiCulo

Respuesta

134
/*jslint browser: true*/ 

Es la solución correcta para esto.

2017-07-07: documentación JSLint ahora dice:

browser ... No autoabastecimiento o ventana; tendrá que solicitar estos alias del temido objeto global usted mismo.

y

El/mundial/Directiva sólo se puede utilizar cuando el asumir una opción del navegador se selecciona.

Así que ahora tendrá que utilizar:

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

@bjoernwibeen ha dicho en su respuesta que esta es la solución correcta a partir de ahora. Tenga en cuenta que hubo dos años de diferencia en nuestras dos respuestas. –

+1

La documentación oficial para respaldar esto se puede encontrar en: http://www.jslint.com/lint.html#options 'Algunos globales se pueden predefinir para usted. Seleccione la opción Asumir un navegador (navegador) para predefinir las propiedades globales estándar proporcionadas por los navegadores web, como document y addEventListener. Esto también incluye la ventana. –

+0

Marcó como la respuesta correcta. Debería haber agregado el comentario sobre la pregunta, así que habría recibido una alerta no reparada esto 3 años demasiado tarde. : P –

76

apenas hacer un comentario en el script de esa manera:

/*global window */ 

... your script goes here 

Este comentario le dirá que JSLint window se define en otro lugar.

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

JSLint también reconoce un comentario /* global */ que puede indicar a JSLint que las variables utilizadas en este archivo se definen en otros archivos. El comentario puede contener una lista de nombres separados por comas. Cada nombre puede ser seguido opcionalmente por dos puntos y verdadero o falso, cierto indica que la variable puede ser asignada por este archivo, y falso indicando que la asignación no está permitida, que es la predeterminada.

Cuando se desea ventana sea global por defecto sin tener que aplicar el comentario a su script, puede añadir predef:["window"] al parámetro literal de objetos dentro de la función JSLINT de su archivo local de jslint.js.

BTW, estoy usando predef:["$","window"] para tener jQuery global también.

Actualización:

Esta respuesta era correcta en el 2009. A partir de ahora se debe utilizar la solución /*jslint browser: true*/ proporcionada por Matt Clarkson.

+0

Gracias que funcionó. –

+5

Aunque este trabajo no es la respuesta "correcta". 'browser: true' es. –

+0

Como se menciona en la respuesta anterior, la respuesta de Matt Clarkson es la correcta. – superluminary

3

tuve que usar las dos respuestas anteriores en este código para deshacerse de todas las advertencias:

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

Así que para mí , esta es la solución cuando se usa el JSLint website:

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

Para permitir que JSLint saber que reconoces window como un objeto global, añadir esta directiva en la parte superior de su archivo:

/*global window*/ 

Yo solía ser capaz de utilizar:

/*jslint browser: true */ 

pero esto ya no parece funcionar. Ahora, de acuerdo con el JSHint help con respecto a la opción browser:

no suministra self o window; tendrá que solicitar estos alias del temido objeto global usted mismo.

No estoy seguro de cuándo se realizó el cambio, pero me tuvo bloqueado por un tiempo.

1

Si no desea especificar esto en cada archivo se puede establecer a nivel mundial en su archivo de configuración eslintrc así:

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