我使用 jslintant.js 在 Rhino 中运行 JSLint 检查。
我发现了一些有点奇怪的东西,想知道我是否可以从其他程序员那里得到一些意见。基本上,以下行获取JSLint '脚本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,
因此,考虑到这种约束以及拖放bookmarklet仅使用A标记的HREF属性这一事实。我们如何动态创建传递JSLint测试的bookmarklet?
感谢您的意见。
答案 0 :(得分:16)
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,则可以设置&#34; scripturl&#34;压制此类警告的选项,无需使用变通方法:
/*jshint scripturl:true*/
var x = 'javascript: foo()';
答案 1 :(得分:0)
我也遇到过这个问题,就像有人建议你把它分成几部分来解决警告一样但是
var x = 'javascript' + ':';
没有工作。比以前建议的方法更简单的方法是:
var x = 'javascript' + ':'.toLowerCase() + 'alert("my action")';