如何替换chrome.tabs.onSelectionChanged弃用的方法?

问题描述:

我需要从用户将要离开的选项卡中获取数据(切换到其他选项卡或进入其他程序)。如何替换chrome.tabs.onSelectionChanged弃用的方法?

但chrome.tabs似乎没有提供一个事件,允许的..

之前有明显chrome.tabs.onSelectionChanged(未测试),但它的弃用。

与其他事件被赋予新的选项卡不是一个刚刚离开的用户的数据...

我也尝试jQuery的$(窗口).blur事件,但我已经做出了一个电话用户留下的选项卡的chrome.storage(我为每个选项卡id命名的选项卡创建一个存储空间),并且我没有及时获得该事件的存储响应(存储的结果用于if( )知道如果我有或不显示确认对话框。

有人能帮助我吗?

THX!

要检测标签更改,只需使用chrome.tabs.onActivated。由于您对上一个标签感兴趣,因此请将事件结果存储在每个事件结束时。例如,像这样:

var storedWindowInfo = {}; 
chrome.tabs.onActivated.addListener(function(activeInfo) { 
    var windowLastTabId = storedWindowInfo[activeInfo.windowId]; 
    if (windowLastTabId) { 
     // Do something with previous tab, e.g. send a message: 
     chrome.tabs.sendMessage(windowLastTabId); 
    } 
    // Update ID of currently active tab in the current window 
    storedWindowInfo[activeInfo.windowId] = activeInfo.tabId; 
}); 

注意:只有tabID和windowID被提供给这个事件。您需要发出chrome.tabs.query以获取更多信息,例如该选项卡是否存在,其URL等。

+0

它工作得很好!非常感谢Rob! – RomB6 2013-05-13 16:15:32

+0

只是,为什么lastTabId存储在activeInfo.windowId中?这不合乎逻辑吗?因为我试图获取activeInfo.tabId,但包含新标签的ID ......如果lastTabId存储在一个新的属性中,像activeInfo对象中那样存储,它会更清楚吗?不是? – RomB6 2013-05-13 16:16:34

+0

我创建了一个字典'storedWindowInfo'。每个窗口都有一个“上次活动标签”。我将此选项卡的ID作为值存储在字典*以后检索。由于窗口是'windowId'的唯一标识符,因此我使用'windowId'作为关键字。 – 2013-05-13 16:18:19