关闭与已打开的选项卡域匹配的所有新选项卡

时间:2015-04-12 15:17:33

标签: javascript regex google-chrome google-chrome-extension

早上好, 我正在尝试制作此Chrome扩展程序,该扩展程序将关闭与已打开选项卡的域匹配的每个新选项卡。我一直在尝试和关闭,因为我已经关闭任何与已经打开的标签网址完全匹配的新标签。

这是我到目前为止的剧本。

chrome.tabs.onCreated.addListener(function(newTab) {
    chrome.tabs.getAllInWindow(newTab.windowId, function(tabs) {
        var duplicateTab = null;
        tabs.forEach(function(otherTab) {
            if (otherTab.id !== newTab.id && otherTab.url === newTab.url) {
                duplicateTab = otherTab;
            }
        });
        if (duplicateTab) {
            chrome.tabs.update(duplicateTab.id, {"selected": true});
            chrome.tabs.remove(newTab.id);
        }
    });
});

所以是的,所以基本上如果例如如果tab1已经打开example.com那么我希望这个脚本关闭任何其他使用相同域打开的选项卡,无论url是否完全匹配。

1 个答案:

答案 0 :(得分:1)

您可以使用Regular Expression从otherTab.url获取域名,并使用.test()方法查看它是否与newTab.url匹配。这是一个快速测试,看起来像你想要的那样工作。

chrome.tabs.onCreated.addListener(function (newTab) {
    chrome.tabs.getAllInWindow(newTab.windowId, function(tabs) {
        var duplicateTab = null;
        tabs.forEach(function(otherTab) {
            // Grab the domain from the otherTab
            var otherDomain = otherTab.url.replace(/(?:(?:http)s?:\/\/)?(.*?\..{2,3}(\..{2})?)(?:.*)/i, '$1');
            // Create a new RegEx pattern with it
            otherDomain = new RegExp(otherDomain, 'i');
            // Then test to see if it matches the newTab.url
            if (otherTab.id !== newTab.id && otherDomain.test(newTab.url)) {
                duplicateTab = otherTab;
            }
        });
        if (duplicateTab) {
            chrome.tabs.update(duplicateTab.id, {"selected": true});
            chrome.tabs.remove(newTab.id);
        }
    });
});