2012-04-06 8 views
0
  1. Documentation beschreibt OnActivated als: chrome.tabs.onActivated.addListener(function(object activeInfo) {...});Was ist der Unterschied zwischen onSelectionChanged, onActiveChanged und onActivated?

    ausgelöst, wenn die aktiven Registerkarte in einem Fenster ändert. [...]

  2. Als Kommentar zu seiner eigenen Antwort auf another question, sagt @RobW:

    Die richtige Methode ist chrome.tabs.onActiveChanged, mit der gleichen Signatur wie die nicht existierende chrome.tabs.onActivated.

  3. Schließlich a sample extension verwendet OnSelectionChanged scheinbar für den gleichen Zweck:

    chrome.tabs.onSelectionChanged.addListener(function(tabId) { 
        lastTabId = tabId; 
        chrome.pageAction.show(lastTabId); 
    }); 
    

Was ist der Unterschied zwischen OnSelectionChanged und onActiveChanged? Warum gibt es keine Dokumentation für onSelectionChanged? Was sollte I verwenden, um Tab-Änderungen zu hören?

+0

Hinweis: Zum Zeitpunkt der Buchung, ich (und Sie) waren mit Chrome 17. Die 'onActivated' Ereignis ** tut ** in Chrome 18 vorhanden. Wenn Sie Chrome <17 verwenden möchten, verwenden Sie "onActiveChanged" (der entsprechende Alias ​​für "onSelectionChanged"). –

Antwort

3

Sie sollten onActivated (nur Chrome 18+) verwenden, um auf Tab-Änderungen zu warten. onActivated und onSelectionChanged sind veraltete Ereignisse.

Im Quellcode (siehe Anhang), der Zweck dieser Ereignisse und ihre Verwendung. Ich habe my previous answer mit einer kleinen Demo zur Verdeutlichung aktualisiert.

Dies ist der relevante Teil des source code sind bemerkenswerte Teile hervorgehoben:

 
    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); 
} 
Verwandte Themen