2011-11-01 65 views
12

我使用jslintant.js運行的JSLint檢查中犀牛的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, 

因此,考慮到這個限制t,並且拖拽書籤只使用A標籤的HREF屬性。我們如何動態創建通過JSLint測試的bookmarklets?

感謝您的輸入。

回答

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的,你可以設置「在scriptUrl」選項來剿此類警告,而無需使用一種變通方法:

/*jshint scripturl:true*/ 
var x = 'javascript: foo()'; 
+0

感謝missigno,我在想'「的javascript」 +「:」 + bookmarkletJs'自己,但我不知道是否有一個更優雅的方式。 –

+0

我能想到的唯一更優雅的是如果有一個JSLint選項來禁用警告。不過,我今天沒有心情去拖拉JSLint選項;) – hugomg

+0

這個答案不再有效,再加上,沒有選項可以禁用檢查!真的很煩人。更糟糕的是,jslint中沒有任何通用的方法可以忽略代碼部分。所以總結:沒有辦法在jslint中壓制這個警告。 – weiglt

0

我就遇到了這個問題太像別人之前,你可以建議將其拆分成零件以避開警告,但是

var x = 'javascript' + ':'; 

將不起作用。比以前建議的方法更簡單的方法是:

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