JSLint and Bookmarklets

JSLint and Bookmarklets

本文关键字:Bookmarklets and JSLint      更新时间:2023-09-26

我正在运行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.

我已经进入了Douglas Crockford在fulljslint.js中写的代码,发现他确实在测试如下:

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

因此,考虑到这个约束和拖放bookmarklet只使用A标记的HREF属性的事实。如何动态创建通过JSLint测试的bookmarklet ?

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()';

我也遇到了这个问题,就像之前有人建议的那样,你可以把它分成几个部分来绕过警告,但是

var x = 'javascript' + ':';

行不通。比前面建议的方法更简单的方法是:

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