2011-11-01 15 views
12

biegnę JSLint kontrole w Rhino użyciu jslintant.js.JSLint i Bookmarklety

Znalazłem coś dziwnego i zastanawiałem się, czy mogę uzyskać jakieś informacje od innych programistów. Zasadniczo następujący wiersz Pobiera JSLint 'skryptu URL' błąd:

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

Błąd:

Lint at line 124 character 35: Script URL. 

Poszedłem do kodu, który Douglas Crockforda napisał w fulljslint.js i stwierdził, że rzeczywiście testuje to w następujący sposób:

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

Tak więc, biorąc pod uwagę to ograniczenie t oraz fakt, że bookmarks typu "przeciągnij i upuść" używają tylko atrybutu HREF znacznika A. W jaki sposób mamy tworzyć dynamiczne zakładki, które przechodzą test JSLint?

Dzięki za twój wkład.

Odpowiedz

16

JSLint może być czasami zbyt wybredny. W tym przypadku sugerowałbym próbę obejścia tego problemu. Poniższe dwa obejścia wyrażenie regularne badanie przez dzielenie ciąg na mniejsze części:

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

lub

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

Niestety, nie można po prostu złączyć literały ciągów z + (w starej wersji tego oDPOWIEDŹ wykorzystywane sugerować), ponieważ nowe wersje JSLint dodany jakiś specjalny kod, aby wykryć, że:

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

Edit: Jeśli używasz JSHint zamiast JSLint można ustawić opcję „scripturl”, aby wyciszyć tę klasę ostrzeżenia, bez konieczności korzystania z rozwiązania:

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

Dzięki missigno, myślałem '„java”+„:”+ bookmarkletJs' siebie, ale zastanawiam się, czy istnieje bardziej eleganckie podejście. –

+0

Jedyna bardziej elegancka rzecz, jaką mogę wymyślić, to czy istnieje opcja JSLint, aby wyłączyć ostrzeżenie. Jednak nie jestem w nastroju, aby trałować mimo opcji JSLint dzisiaj;) – hugomg

+0

Ta odpowiedź już nie działa, plus, nie ma opcji, aby wyłączyć kontrolę! Naprawdę denerwujące. I żeby było jeszcze gorzej, nie ma już ogólnej drogi do ignorowania fragmentów kodu w jslint. Tak podsumował: nie ma sposobu, aby powstrzymać ostrzeżenie o tym w jslint. – weiglt

0

wpadłem na ten problem też, jak ktoś zasugerował, zanim będzie można podziel go na części, aby obejść ostrzeżenie, ale nie będzie działać. Prostszy sposób niż poprzednio sugerowanej metody jest:

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