【问题标题】:JSLint and BookmarkletsJSLint 和书签
【发布时间】:2011-11-01 13:04:58
【问题描述】:

我正在使用 jslintant.jsRhino 中运行 JSLint 检查。

我发现了一些奇怪的东西,想知道我是否可以从其他程序员那里得到一些意见。基本上,以下行会收到 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,

因此,鉴于此约束以及拖放小书签仅使用 A 标记的 HREF 属性这一事实。我们应该如何动态创建通过 JSLint 测试的书签?

感谢您的意见。

【问题讨论】:

    标签: javascript bookmarklet rhino 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()';
    

    【讨论】:

    • 谢谢misssigno,我自己也在想'javascript' + ':' + bookmarkletJs,但我想知道是否有更优雅的方法。
    • 我能想到的唯一更优雅的事情是是否有一个 JSLint 选项来禁用警告。但是,我今天没有心情浏览 JSLint 选项 ;)
    • 这个答案不再有效,此外,没有禁用检查的选项!真烦人。更糟糕的是,在 jslint 中没有通用的方法来忽略代码部分。总结一下:没有办法在 jslint 中禁止对此发出警告。
    • @weiglt:看起来 JSLint 又是一个迂腐的混蛋。除了使用内部变量的解决方法之外,您还可以使用 Array.join 或使用 JSHint。
    • @weiglt:正如我之前提到的,这取决于“javascript”是否位于字符串的开头。
    【解决方案2】:

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

    var x = 'javascript' + ':';
    

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

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

    【讨论】:

      猜你喜欢
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 2012-08-13
      • 2016-09-23
      • 2018-04-19
      相关资源
      最近更新 更多