在写一个Chrome 的快速拨号扩展。起因是Chrome 默认的新标签页很让人头疼,没有快速拨号,那 8 个最常访问网站会随着一段时间的浏览习惯而动来动去。好的地方就是有网站缩略图,还有那个“最近关闭的标签页”挺好的。

缩略图这一块,现在是没有办法了。在Chromium 的Issues 里看到有人反映过,但是目前还是禁止扩展访问chrome://thumb/ 的,chrome://favicon/ 倒是可以访问,前提是在扩展的manifest 中请求chrome://favicon 权限。

“最近关闭的标签页”这个还真是没有想到具体实现方式,默认新标签页源码太多了,实在是没有耐心去完整地看一遍。(不过性能真的是优化得很好)现在在看Sexy Undo Close Tab 的代码。

扩展中使用到了我自己写的query 选择器,不过我昨天找到了一个非常优秀的替代品——司徒正美的Icarus,有很大的可能会使用它。还使用到了Mousetrap 来绑定快捷键(这货真的很方便的说),所以原来的Tab 切换函数不能用了。(因为用快捷键的话要能记住当前焦点在哪个Tab 或Item 上)记一下现在用的。(没有优化过,现在很容易报错。)

// Tab and item switch.
var Tab = {};
Tab.TabMax = 3;
Tab.ItemMax = 0;
Tab.nowTab = 1;
Tab.nowItem = 0;
Tab.switchToTab = function(targetTabId){
  var self = this;
  self.nowItem = 0;
  if(targetTabId != self.nowTab){
    $('#tab-controler').$('.now')[0].removeAttribute('class');
    $('#tab-controler').children[targetTabId-1].setAttribute('class', 'now');
    $('#fall-tabs').$('.now')[0].setAttribute('class', 'falltab');
    $('#fall-tabs').children[targetTabId-1].setAttribute('class', 'now');
    self.nowTab = targetTabId;
    self.ItemMax = $('#fall-tabs').children[self.nowTab-1].$('a').length;
  }
  return self.nowTab;
};
Tab.switchToItem = function(targetItemId){
  var self = this;
  if(targetItemId != self.nowItem){
    $('#fall-tabs').children[self.nowTab-1].$('a')[targetItemId-1].focus();
    self.nowItem = targetItemId;
  }
  return self.nowItem;
};

比较简单,其他的就不记了哈。