小书签
小书签(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设计得可以在运行时产生一个新文档,例如 |
||
—— 布蘭登·艾克, 寄给西門·威利森的邮件[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 */
})();
用途
小书签的存储与使用和普通书签一致。如同它们的名字,小书签是一种十分易用的工具。例如:
- 修改网页的外观(修改字体大小,背景颜色等)
- 从网页中提取某些数据(链接,图片,文本等)
- 将当前页面提交到博客平台(例如Posterous、Tumblr),社会化网站(例如Facebook、Twitter),缩短链接服务(bit.ly、su.pr等)或是书签服务(Delicious)
- 快速调用搜索引擎搜索当前页面选中的文字
- 将网页提交到链接检测服务,或是在线翻译服务
- 设置某些页面本身不能修改的功能
安装
小书签一般是通过创建一个新书签并将代码粘贴入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();
参见
- Greasemonkey
- iMacros
- Ubiquity
参考文献
- 域名bookmarklets.com 的存檔,存档日期2009-07-07.注册于1998年4月9日
- . What's New in JavaScript 1.2. Netscape Communications Corporation. 1997. (原始内容存档于2002-06-11).
- Willison, Simon. . SitePoint. April 10, 2004.
- Mozilla Firefox, Opera, Safari,和Chrome上运行且不支持IE.原始来源:Alex Boldt