Documentation将 onActivated 描述为:chrome.tabs.onActivated.addListener(function(object activeInfo) {...});
窗口中的活动标签更改时触发。 [...]
作为对another question自己答案的评论,@ RobW说:
正确的方法是 chrome.tabs.onActiveChanged,具有与之相同的签名 不存在的chrome.tabs.onActivated。
最后,a sample extension使用 onSelectionChanged ,似乎是出于同样的目的:
chrome.tabs.onSelectionChanged.addListener(function(tabId) {
lastTabId = tabId;
chrome.pageAction.show(lastTabId);
});
onSelectionChanged 和 onActiveChanged 之间的区别是什么?为什么 onSelectionChanged 没有文档? I 应该用什么来收听标签更改?
答案 0 :(得分:3)
您应该使用onActivated
(仅限Chrome 18+)来监听标签更改。 onActivated
和onSelectionChanged
是不推荐使用的事件。
在源代码中(参见附件),这些事件的目的及其用法。我已经用一个小型演示更新了my previous answer,以便澄清。
这是source code的相关部分,突出显示了值得注意的部分:
void ExtensionBrowserEventRouter::ActiveTabChanged( TabContentsWrapper* old_contents, TabContentsWrapper* new_contents, int index, bool user_gesture) { ListValue args; int tab_id = ExtensionTabUtil::GetTabId(new_contents->web_contents()); args.Append(Value::CreateIntegerValue(tab_id)); DictionaryValue* object_args = new DictionaryValue(); object_args->Set(tab_keys::kWindowIdKey, Value::CreateIntegerValue( ExtensionTabUtil::GetWindowIdOfTab(new_contents->web_contents()))); args.Append(object_args); // The onActivated event replaced onActiveChanged and onSelectionChanged. The // deprecated events take two arguments: tabId, {windowId}. std::string old_json_args; base::JSONWriter::Write(&args, &old_json_args); // The onActivated event takes one argument: {windowId, tabId}. std::string new_json_args; args.Remove(0, NULL); object_args->Set(tab_keys::kTabIdKey, Value::CreateIntegerValue(tab_id)); base::JSONWriter::Write(&args, &new_json_args); Profile* profile = new_contents->profile(); DispatchEvent(profile, events::kOnTabSelectionChanged, old_json_args); DispatchEvent(profile, events::kOnTabActiveChanged, old_json_args); DispatchEvent(profile, events::kOnTabActivated, new_json_args); }