首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切换选项卡的Chrome扩展:选项卡选择超时问题

切换选项卡的Chrome扩展:选项卡选择超时问题
EN

Stack Overflow用户
提问于 2013-07-24 10:04:09
回答 1查看 441关注 0票数 1

我创建了一个简单的扩展,在当前和最后一个聚焦选项卡之间切换。切换可以通过ALT+Q完成,也可以通过单击扩展图标栏中的按钮来完成。只有一个问题。扩展似乎忘记了在当前选项卡上花费一定时间之后的最后一个焦点选项卡。也就是说,我不能再切换到最后一个焦点标签了。

有人能给我解释一下为什么我的扩展忘记了最后一个焦点标签吗?

代码语言:javascript
复制
// manifest.json

{    
    "background": {
        "scripts": ["background.js"],
        "persistent": false
    },
    "name": "Toggle Switch Recent Last Tabs",
    "version": "1.1",
    "manifest_version": 2,
    "description": "Toggle between your current and last used (focused) tab with a keyboard shortcut (ALT+Q by default) or mouse click on the icon.",
    "browser_action": {
        "default_title": "",
        "default_icon": "icon.png"
    },
    "commands": {
        "toggle": {
            "suggested_key": {
                "default": "Alt+Q"
            },
            "description": "Toggle tabs"
        }
    },
    "permissions": [
        "tabs", 
        "http://*/",
        "https://*/*"
    ],
    "icons": {
        "16": "icon_16.png",
        "32": "icon_32.png",
        "48": "icon_48.png",
        "128": "icon_48.png"
    }
}

background.js

代码语言:javascript
复制
// background.js

var previousTab;
var currentTab;

// General functions
chrome.browserAction.onClicked.addListener(function(tab) {
    chrome.tabs.update(previousTab, {selected: true});
});

chrome.tabs.onSelectionChanged.addListener(function(tab) {
    if (previousTab == null) {
        previousTab = tab;
    }
    if (currentTab == null) {
        currentTab = tab;
    }
    else {
        previousTab = currentTab;
        currentTab = tab;
    }
});


// Keyboard shortcut toggle function
chrome.commands.onCommand.addListener(function(command) {
  if (command == "toggle") {

    chrome.tabs.getSelected(null, function(tab) {
        previousTab = tab.id;
        currentTab = null;
    });

    chrome.tabs.update(previousTab, {selected: true});
  }
});

在网上商店下载

完整源代码

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 11:45:25

简而言之,你正在失去状态。可能是因为背景页不是持久的(persistent: false在manifest.json中)。

这种页面称为事件页,而不是后台页面,为了提高效率,它在几秒钟的不活动之后卸载,并在事件调用时重新加载。

奇怪的是,我不得不解释:首先,Chrome运行这个页面只是为了注册听众。之后,页面将被卸载,释放全局变量,但Chrome会记住侦听器。当事件调用其中之一时,Chrome将加载整个事件页,将再次创建带有初始值的全局变量。

要修复它,首先尝试将persistent更改为true。如果成功,最好返回persistent: false并将变量(previousTab、currentTab)保存在存储中。

chrome.storage.local更快、更高效,但却是异步的。值得花点时间让它发挥作用!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17830838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档