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?
Спасибо за ваш вклад.
Ответы
Ответ 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")';