JavaScript: 用作URL或者Bookmarklet

风行水上 @ 2010-12-07 22:16:33
标签:

    在浏览器中,也可以把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)';
    

    Bookmarklet

    事实上,把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');
     }) + ")()";
    

    参考资源

    • http://wiki.greasespot.net/Location_hack
    • http://www.bookmarklets.com/
    标签:

      分享到:
      comments powered by Disqus

      15/16ms