Подтвердить что ты не робот

JSLint и закладки

Я выполняю JSLint проверку Rhino с помощью jslintant.js.

Я нашел что-то немного странное и задавался вопросом, могу ли я получить некоторые данные от других программистов. В основном, следующая строка получает ошибку JSLint 'Script URL:

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

Ошибка:

Lint at line 124 character 35: Script URL.

Я пошел в код, который Дуглас Крокфорд написал в fulljslint.js, и обнаружил, что он действительно тестирование для этого следующим образом:

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

Таким образом, учитывая это ограничение и тот факт, что в записях выпадающего списка используется только атрибут HREF тега A. Как мы хотим динамически создавать букмарклеты, которые проходят тест JSLint?

Спасибо за ваш вклад.

4b9b3361

Ответ 1

JSLint может быть слишком разборчивым время от времени. В этом случае я предлагаю попробовать пойти обходным путем. Следующие два обхода теста регулярного выражения путем разделения строки на более мелкие части:

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

или

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

К сожалению, вы не можете просто конкатенировать строковые литералы с помощью + (как предполагала старая версия этого ответа), поскольку новые версии JSLint добавили некоторый специальный код для обнаружения:

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

Изменить: Если вы используете JSHint вместо JSLint, вы можете установить параметр "scripturl", чтобы подавить этот класс предупреждений без использования обходного пути:

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

Ответ 2

Я столкнулся с этой проблемой, как и кто-то предложил, прежде чем вы сможете разбить ее на части, чтобы обойти предупреждение, но

var x = 'javascript' + ':';

не будет работать. Проще, чем ранее предлагаемый метод:

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