@zoand
2015-07-01T23:26:24.000000Z
字数 1993
阅读 1952
chrome插件
由于标签的操作行为比较多,所以相应的监视事件也很多。监控标签行为的事件包含onCreated
、onUpdated
、onMoved
、onActivated
、onHighlighted
、onDetached
、onAttached
、onRemoved和onReplaced
。
大部分事件都比较好理解,下面重点记录不易理解的事件。
onHighlighted
是当标签被高亮显示时所触发的事件,active
和highlight
是有区别的,active
是指标签在当前窗口中正被显示,highlight
只是标签的颜色被显示成了白色——如果此标签没有被选中正常情况下是浅灰色。onDetached
是当标签脱离窗口时所触发的事件,导致此事件触发的原因是用户在两个不同的窗口直接拖拽标签。onAttached
是标签附着到窗口上时所触发的事件,同样是用户在两个不同的窗口直接拖拽标签导致的。onReplaced
是当标签被其他标签替换时触发的事件。
要解释清楚onReplaced
就不得不提一下即搜即得和预呈现(Instant search,Prerendering)。例如默认搜索引擎为 Google,启用了即搜即得,网络条件也足够好,在打开的另一个网页地址栏中开始输入关键字并且即时出现结果时,此时按下回车键,当前标签页就会被Google搜索结果替换,产生onReplaced
事件。如果扩展程序通过tabId
追踪标签页的话就必须处理该事件。
chrome.tabs.onCreated.addListener(function(tab){
console.log(tab);
});
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab){
console.log('Tab '+tabId+' has been changed with these options:');
console.log(changeInfo);
});
chrome.tabs.onMoved.addListener(function(tabId, moveInfo){
console.log('Tab '+tabId+' has been moved:');
console.log(moveInfo);
});
chrome.tabs.onActivated.addListener(function(activeInfo){
console.log('Tab '+activeInfo.tabId+' in window '+activeInfo.windowId+' is active now.');
});
chrome.tabs.onHighlighted.addListener(function(highlightInfo){
console.log('Tab '+activeInfo.tabId+' in window '+activeInfo.windowId+' is highlighted now.');
});
chrome.tabs.onDetached.addListener(function(tabId, detachInfo){
console.log('Tab '+tabId+' in window '+detachInfo.oldWindowId+' at position '+detachInfo.oldPosition+' has been detached.');
});
chrome.tabs.onAttached.addListener(function(tabId, attachInfo){
console.log('Tab '+tabId+' has been attached to window '+detachInfo.newWindowId+' at position '+detachInfo.newPosition+' .');
});
chrome.tabs.onRemoved.addListener(function(tabId, removeInfo){
console.log('Tab '+tabId+' in window '+removeInfo.windowId+', and the window is '+(removeInfo.isWindowClosing?'closed.':'open.'));
});
chrome.tabs.onReplaced.addListener(function(addedTabId, removedTabId){
console.log('Tab '+removedTabId+' has been replaced by tab '+addedTabId+'.');
);
通过标签接口,扩展可以更灵活地处理不同标签。虽然标签涉及到的内容很多,但常用的部分很有限。