JSLint and Bookmarklets
JSLint and Bookmarklets
我正在运行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")';
相关文章:
- Selenium WebDriver and JavaScript change
- PHP and Javascript functions
- Javascript Return and if/else
- SetTimeout and clearTimeout in Javascript
- lightbox in html 5 and javascript
- TimelineJS and AngularJS
- timeago.js with datatable and PHP
- javascript button ajax and php
- Ajax and Json with Rails
- Combine onload, onresize and onclick
- php布尔值's小写AND大写和数字布尔值'可以接受
- setTimeout and V8
- Jquery post and onclick
- Moment js and IOS
- Rails 3.2 and Paloma gem
- Backbone, TypeScript, and super
- iframe and JavaScript on different pages
- JSON and jQuery Search
- Flash and External Javascript
- JSLint and Bookmarklets