2011-11-01 14 views
12

estoy corriendo JSLint cheques en Rhino usando jslintant.js.JSLint y Bookmarklets

Encontré algo un poco extraño y me preguntaba si podría obtener información de otros programadores. Básicamente, la siguiente línea de error se pone una 'URL de secuencias de comandos' JSLint :

var a = '<a href="javascript:alert(\'I am a bookmarklet\');" >Drag me to your Toolbar</a>'; 

error:

Lint at line 124 character 35: Script URL. 

he ido en el código que Douglas Crockford escribió en fulljslint.js y encontró que de hecho, él está probando esto de la siguiente manera:

// javascript url 
jx = /(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i, 

Por lo tanto, teniendo en cuenta esta restricción t y el hecho de que los marcadores de arrastrar y soltar solo usan el atributo HREF de la etiqueta A. ¿Cómo se pretende crear dinámicamente marcadores que pasen una prueba JSLint?

Gracias por su aportación.

Respuesta

16

JSLint puede ser demasiado quisquilloso a veces. En este caso, sugeriría tratar de buscar una solución alternativa. Los dos derivación tras la prueba de expresión regular mediante la división de la cadena en partes más pequeñas:

var x = ['<a href="javascript', ':', 'stuff'].join(''); 

o

var tmp = '<a href="javascript' 
var x = tmp + ':stuff"'; 

Por desgracia, no se puede simplemente concatenar los literales de cadena con + (como la versión anterior de este de respuesta utilizado para sugerir) porque las nuevas versiones de JSLint añaden algún código especial para detectar que:

var x = 'javascript' + ':' + 'stuff'; // JSLint might still give a warning here. 

Editar: Si está utilizando JSHint en lugar de JSLint puede establecer la opción "scripturl" para suprimir esta clase de avisos sin necesidad de utilizar una solución:

/*jshint scripturl:true*/ 
var x = 'javascript: foo()'; 
+0

Gracias missigno, estaba pensando ' 'javascript' + ':' + bookmarkletJs' mí mismo, pero me pregunto si hay un enfoque más elegante. –

+0

Lo único más elegante que se me ocurre es si hay una opción JSLint para desactivar la advertencia. Sin embargo, no estoy de humor para navegar por las opciones de JSLint hoy;) – hugomg

+0

¡Esta respuesta ya no funciona, además, no hay ninguna opción para deshabilitar el cheque! Realmente molesto. Y para empeorar las cosas, ya no hay una forma general en jslint de ignorar las partes del código. Así que resumió: no hay forma de suprimir una advertencia para esto en jslint. – weiglt

0

me encontré con este problema también, como alguien sugirió antes de que pueda dividirlo en partes para evitar la advertencia, pero

var x = 'javascript' + ':'; 

no funcionará. Una forma más simple que el método sugerido anteriormente es:

var x = 'javascript' + ':'.toLowerCase() + 'alert("my action")';