在浏览器中,也可以把JavaScript当作URL来作为链接的地址或者地址栏中的地址。比如下面这样的例子:
<a href="javascript:alert(123);return 0;">Click Me 1</a> <a href="javascript:alert(456);void(0)">Click Me 2</a>
Click Me 1
Click Me 2
这种用法相当于把链接当作按钮(button)来使用,但却拥有链接的外观。这并不值得鼓励,因为在语义上用button标签更贴切。但如果要用的话,注意上面例子中最后的 void(0) 或者 "return 0",这样做得目的是阻止页面发生跳转。实际上,因为把JavaScript用作URL的时候是无所谓返回值的,所以使用 "void(0)"作为最后一条语句也许显得更有意义一些。
既然JavaScript可以用作URL,那么我们自然可以写出类似下面的语句来:
window.location.assign('javascript:alert(456);void(0)'); // 或者 window.location.href = 'javascript:alert(456);void(0)';
事实上,把JavaScript用作URL,并把这个URL保存为书签,也就是所谓的Bookmaklet。
由于Bookmarklet的脚本长度通常相对较长,对于大块的JavaScript代码,我们可以处理如下:
location.href = "javascript:(" + function() { // do something } + ")()";
这里利用了JavaScript中function到字符串的自动转换。
考虑到URL编码中可能用百分号(%)对字符进行编码,从而导致包含%的JavaScript的代码产生错乱。比较稳妥的方法如下:
location.href = "javascript:(" + encodeURI( function() { var n = 44; if(!(n%22)) alert('n is a multiple of 22'); }) + ")()";