Chrome扩展程序可切换标签:标签选择超时问题

Orschiro

我创建了一个简单的扩展程序,可以在当前焦点选项卡和最后一个焦点选项卡之间切换。切换可以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});
  }
});

在网上商店下载

完整的源代码

亚历杭德罗·西尔维斯特里(Alejandro Silvestri)

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

这种页面称为“事件”页面,而不是背景页面,为了提高效率,它在不活动几秒钟后即被卸载,并在事件调用时重新加载。

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

要解决此问题,请首先尝试将其更改persistenttrue如果可行,最好返回persistent: false并在存储中保存变量(previousTab,currentTab)。

chrome.storage.local更快,更高效,但异步。值得花一些时间使它起作用!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章