小书签(英語:bookmarklet),又叫书签小程序,是一种小型的程序,以網址(URL)的形式被存为浏览器中的书签,也可以是网页上的一个链接。小书签的英文名,Bookmarklet是由Bookmark和Applet组合而来。无论小书签以什么形式储存,它们都是用来给浏览器或是网页添加一些特定功能的。点击时,小书签会执行这些操作,包括执行搜索,导出数据等等。小书签一般是JavaScript程式。
历史
bookmarklets.com的Steve Kangas发明了bookmarklet这个词[1],之后他在Netscape的JavaScript指南中的某些内容上产生了自己的创意[2]。最早的一个词语是favelet在2001年9月6日被坦塔克·塞里克所使用。而在Netscape发明JavaScript的布蘭登·艾克这样说明小书签的来历:
“
|
这是一个特意设计的特性:我在1995年发明JavaScript的时候发明了javascript: 这类URL,并打算使得javascript: URLs用法和其他URL一样,包括收录入收藏夹。
我特地把"JavaScript:" URL设计得可以在运行时产生一个新文档,例如javascript:'hello, world' ,同时也可以在当前文档的DOM下运行任意脚本(这点对小书签尤其有用),就像这样:javascript:alert(document.links[0].href) 。这两者的区别就是,后者的URL在JS解析下值为undefined。我在Netscape 2投入市场前加入了void操作符来清除任何非undefined的javascript: URL的值。
|
”
|
——布蘭登·艾克,寄给西門·威利森的邮件[3]
|
概念
浏览器使用隶属于<a>
标签的href
的URI标签来存储书签。浏览器用URI前缀,例如http:
、file:
、或是ftp:
来确定协议以及请求剩余字符串的格式。
浏览器也能像执行其它前缀一样执行javascript:
。在内部处理时,当浏览器检查到协议为JavaScript,就将后面的字符串作为JavaScript脚本来执行,并用执行结果产生一个新页面。
脚本可以在当前页面执行,这样就能引用和修改当前页面的元素。如果脚本返回了undenfined类型(而不是字符串等),浏览器就不会载入新页面而是直接在当前页面内容上运行Javascript脚本。可以用这个方法在不刷新页面的情形下修改页面内容,比如字体/颜色等。
以下的匿名函数可以用来强制脚本返回undenfined类型:
javascript:(function(){
/* Statements returning a non-undefined type, e.g. assignments */
})();
用途
小书签的存储与使用和普通书签一致。如同它们的名字,小书签是一种十分易用的工具。例如:
安装
小书签一般是通过创建一个新书签并将代码粘贴入URL栏而实现的。现代浏览器中也可把链接形式的小书签直接拖拽到书签栏中,此后小书签就可以像打开普通书签一样正常运作了。
例子
以下示例小书签可以在浏览器窗口中以维基为搜索引擎搜索选定的文字。正常情况下以下的小书签可以被安装在[4]浏览器书签栏中。选中文字后即可点击这个小书签以执行搜索。
javascript:function se (d) {return d.selection ? d.selection.createRange().text : d.getSelection()} s = se (document); for(i=0; i<frames.length && !s; i++)s = se(frames[i].document); if(!s || s=='')s = prompt('输入维基百科搜索关键字',''); open('http://zh.wikipedia.org' + (s ? '/w/index.php?title=Special:Search&search=' + encodeURIComponent(s): '')).focus();
参见
参考文献
外部链接