Chrome扩展程序 - 标签创建/删除问题

时间:2018-02-27 20:36:07

标签: javascript google-chrome-extension

我正在构建一个Chrome扩展程序,用于创建新标签页,加载页面,检索源代码并关闭标签页。这是我的第一个Chrome扩展程序。

到目前为止,创建选项卡,检索源代码和关闭工作但我无法解释的事情正在导致重复的流程中发生。

我在FOR循环中调用以下函数:

# -*- coding: utf-8 -*-

def num_replace(text, wordDict):
    for key in wordDict:
        text = text.replace(key, wordDict[key])
    return text

singular = {
    u"واحد": "1",
    u"اثنان" :"2",
    u"ثلاتة" :"3"
}

s = u"ثلاتة"
s = num_replace(s,singular)
print(s)

属性包含: url:一些网址 active:false

我已经自愿在各地添加了console.log来显示正在发生的事情。

以下是我在控制台中看到的输出:

第一次迭代:

function chromeTabsCreateAsync(createProperties) 
{
    return new Promise((resolve, reject) => 
        {
            console.log('tab start');
            chrome.tabs.create(createProperties, tab => 
                {
                    if (chrome.runtime.lastError) 
                        {
                            reject(new Error(chrome.runtime.lastError));
                        } 
                    else 
                        {

                        chrome.tabs.onUpdated.addListener(onUpdated);
                        function onUpdated(updatedTabId, details) 
                            {
                                    console.log(details.status+' '+tab.id);
                                    if (details.status == 'complete') 
                                        {

                                            chrome.tabs.executeScript(tab.id, 
                                                {
                                                    file: 'test.js',

                                                }, function(results) 
                                                {

                                                    var source = results[0];

                                                    chrome.tabs.remove(tab.id); 
                                                    resolve(source);
                                                });

                                        }
                            }
                        }

                });
            console.log('tab end'); 
        });
}

=>到目前为止,一切都很好

第二次迭代:

tab start
tab end
loading 16
undefined 16
complete 16

=>呃?什么是16在这里做,标签在第一次迭代期间已经关闭

第三次迭代:

tab start
tab end
loading 16
loading 18
undefined 16
undefined 18
undefined 16
undefined 18
complete 16
complete 18

=>它会继续这样,每次迭代都会从前面的标签中获取标签ID,而这些标签已经关闭。

当然因为id不再存在,我收到错误:

运行tabs.executeScript时未经检查的runtime.lastError:在onUpdated上没有id为16的选项卡

您是否知道为什么这些迭代会重复使用以前的ID?

感谢

劳伦

1 个答案:

答案 0 :(得分:0)

答案由wOxxOm提供(见第一条评论)