Javascript Chrome扩展-在后台打开浏览器时打开新选项卡(Mac) 使用

Javascript Chrome扩展-在后台打开浏览器时打开新选项卡(Mac) 使用,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,镀铬37.0.2062.120,镀铬加长件。MacBookPro,MacOS 10.9.3 授予权限后,新选项卡将正常打开 我使用Chrome通知,如果用户单击通知中的特定按钮,则会打开新选项卡 问题 当Chrome处于“隐藏”状态时(虽然没有完全关闭,但在后台工作,当您单击Mac Chrome左上角带有十字的红色气泡时),打开新选项卡不会触发浏览器“恢复”(打开) 因此,浏览器保持隐藏状态,并且没有打开任何选项卡(从技术上讲,是调用回调的,可见未打开)。 代码 从background.js打开

镀铬37.0.2062.120,镀铬加长件。MacBookPro,MacOS 10.9.3

授予权限后,新选项卡将正常打开

我使用Chrome通知,如果用户单击通知中的特定按钮,则会打开新选项卡

问题 当Chrome处于“隐藏”状态时(虽然没有完全关闭,但在后台工作,当您单击Mac Chrome左上角带有十字的红色气泡时),打开新选项卡不会触发浏览器“恢复”(打开)

因此,浏览器保持隐藏状态,并且没有打开任何选项卡(从技术上讲,是调用回调的,可见未打开)。

代码 从background.js打开

// if user triggers new tab open from Chrome Notification
chrome.tabs.create({url:someUrl})
版本 第1版。选项卡只是明显没有打开,技术上是调用回调的

第2版。下面的代码更好,因为如果在创建选项卡时没有聚焦,它会聚焦打开的窗口。然而,这并不能解决原来的问题

chrome.tabs.create({url:someUrl}, function(tab){
  chrome.windows.update(tab.windowId, {focused: true})
})
第3版。现在,它在后台抛出一个错误:

Unchecked runtime.lastError while running tabs.create: No current window
解决方案 非常感谢Xan

function new_tab(url){
  // trying to create a tab
  chrome.tabs.create({url:url}, function(tab){
    if(!tab) {
      // probably no window available
      chrome.windows.create({url:url},function(win){
        // better to focus after window creation callback
        chrome.windows.update(win.id, {focused: true}) 
      })
    } else {
      // better to focus after tab creation callback
      chrome.windows.update(tab.windowId, {focused: true})
    }
  })
}

当然,如果您需要传递额外的选项或回调,则需要修改此函数。

您需要使窗口聚焦:

chrome.tabs.create({url:someUrl}, function(tab){
  chrome.windows.update(tab.windowId, {focused: true});
});

如果没有活动窗口,则需要对此进行说明,并在需要时创建一个:

chrome.tabs.create({url:someUrl}, function(tab){
  if(!tab) {
    // Probably, there was no active window
    chrome.windows.create({url:someUrl, focused:true});
  } else {
    chrome.windows.update(tab.windowId, {focused: true});
  }
});
请注意,这可能不符合默认窗口状态(最大化/正常),但总比没有好。我在一个具有
“background”
权限的扩展上测试了它。

这个答案只适用于Linux和Mac(不适用于不存在问题的Windows)

除非Chrome的至少一部分是当前活动的窗口,否则Chrome扩展无法聚焦窗口。我在一个月前报告了这个bug,并给出了详细的复制步骤


不幸的是,在扩展中没有什么可以做的。如果是个人扩展,您可以创建并编写一个本机应用程序,将焦点放在新窗口上(如果不是个人扩展,则您必须要求用户也安装该本机消息主机)。

Me,但我知道这是行不通的,因为我已经经历过OP报道的问题;)那么,Chrome的这种状态是否与所有可见窗口关闭时的状态相同,比如启用了
后台
的扩展?不,问题不同。OP的问题有点不准确;选项卡已打开,但不可见。否。我会在回答中详细说明,然后你会明白为什么。明白我的答案。如果您当前正在运行Windows虚拟机,是否可以按照错误报告中的步骤进行操作,并查看它是否也在Windows上发生?如果是这样,那么我将把Os Windows标签添加到错误报告中。这是我的个人扩展。您能解释一下我如何使用“本机消息传递主机”来解决我的问题吗?@igorpavlov阅读链接文档以了解有关本机消息传递协议的更多信息,然后编写一个程序(C、Python、Bash、AppleScript(?),您可以任意选择),将重点放在窗口上。使用本机消息协议的。在Linux上,我可以使用
xdool
wmctrl
来更改窗口焦点。用你的谷歌技能为Mac找到类似的东西。在Mac上安装本机消息传递主机。