Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 切换选项卡的Chrome扩展:选项卡选择超时问题_Google Chrome_Google Chrome Extension - Fatal编程技术网

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

Google chrome 切换选项卡的Chrome扩展:选项卡选择超时问题,google-chrome,google-chrome-extension,Google Chrome,Google Chrome Extension,我创建了一个简单的扩展,可以在当前和最后一个焦点选项卡之间切换。可以通过ALT+Q或单击扩展图标栏中的按钮进行切换。只有一个问题。在当前选项卡上花费一定时间后,扩展似乎忘记了最后一个焦点选项卡。也就是说,我不能再切换回上一个焦点选项卡 有人能解释一下为什么我的分机忘记了最后一个焦点标签吗 // manifest.json { "background": { "scripts": ["background.js"], "persistent": f

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

有人能解释一下为什么我的分机忘记了最后一个焦点标签吗

// 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

// 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});
  }
});


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

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

这很奇怪,我必须解释一下:首先,Chrome运行这个页面只是为了注册监听器。之后,页面被卸载,失去了全局变量,但是Chrome记住了侦听器。当一个事件调用其中一个时,Chrome将加载整个事件页面,全局变量将使用其初始值再次创建

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

速度更快、效率更高,但异步。花点时间让它工作是值得的