JSLint和Bookmarklets

时间:2011-11-01 13:04:58

标签: javascript bookmarklet rhino jslint

我使用 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?

感谢您的意见。

2 个答案:

答案 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")';