相关疑难解决方法(0)

Chrome扩展程序错误:"运行browserAction.setIcon时未选中runtime.lastError:没有带标识的选项卡"

我正在编写我的Google Chrome扩展程序,我在后台脚本中设置了应用程序的图标:

try
{
    objIcon = {
        "19": "images/icon19.png",
        "38": "images/icon38.png"
    };

    chrome.browserAction.setIcon({
        path: objIcon,
        tabId: nTabID

    });
}
catch(e)
{
}
Run Code Online (Sandbox Code Playgroud)

请注意,我在try/catch块中包装了调用.

不过,有时我在控制台日志中收到以下消息:

运行browserAction.setIcon时未选中runtime.lastError:没有标识为:11618的选项卡.

调试此错误很难,因为它似乎只在我关闭或重新加载Chrome标签时出现,它没有行号或任何信息供我跟踪,而且通过调试器运行并不容易(即我不能在发生错误时设置断点,但如果我在线上盲目设置断点chrome.browserAction.setIcon(),我就不再在日志中看到该消息了.)

所以我很好奇是否有人可以建议如何解决这个错误?

编辑:只是发布更新.我仍然无法解决此问题.@abraham在下面提出的建议提供了一种有点工作的方法,但它并非失败安全.例如,在标签关闭的情况下,我可以调用他的建议chrome.browserAction.setIcon(),如果标签尚未关闭,可能会成功,但在其回调函数中,标签最终可能会关闭,因此任何连续调用其他API需要相同的标签ID,说setBadgeBackgroundColor()可能仍然给我相同的No tab with id例外.换句话说,对于那些了解本土编程的人来说,这是一种典型的竞争条件.而且我不确定它是否是Chrome中的一个错误,因为很明显JS不提供任何线程同步方法......

在进行测试时,我已经多次目睹了这种行为.它并不经常发生,因为我们谈论的是非常精确的时序情况,但它确实发生了.因此,如果有人找到解决方案,请在下面发布.

javascript google-chrome race-condition google-chrome-extension

21
推荐指数
1
解决办法
1万
查看次数

检查Chrome中是否存在具有确切ID的Tab的最佳方法

有时候选项卡ID存储在一个变量中,你需要检查选项卡是否仍然存在,然后再对其进行操作(因为用户可以随时关闭选项卡).我找到了这个解决方案:

chrome.tabs.get(1234567, function(tab) {
  if (typeof tab == 'undefined') {
    console.log('Tab does not exist!');
  }
});
Run Code Online (Sandbox Code Playgroud)

它有效,但它有很严重的缺点.它将错误消息写入控制台,如下所示:

tabs.get期间出错:没有标识为1234567的标签.

这也不例外.所以try/catch无济于事.这只是控制台中的一条消息.

有任何想法吗?

更新:此错误现在看起来像"运行tabs.get时未检查runtime.lastError:没有标识为1234567的选项卡".

javascript google-chrome-extension

17
推荐指数
1
解决办法
7425
查看次数