Chrome 37.0.2062.120,Chrome扩展程序。 MacBook Pro,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})
}
})
}
当然,如果您需要传递额外的选项或回调,则需要修改此功能。
答案 0 :(得分:2)
您需要关注窗口:
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"
权限的扩展程序上对其进行了测试。
答案 1 :(得分:0)
此答案仅适用于Linux和Mac(不适用于不存在相关错误的Windows)。
Chrome扩展程序无法关注窗口,除非Chrome的至少一部分是当前活动的窗口。我在一个月前报告了这个错误的详细步骤,重现为Issue 407817: chrome.windows.create({ focused:true }) within a desktop notification does not create a focused window。
不幸的是,您无法在扩展程序中执行任何操作。如果它是个人扩展,您可以创建native messaging host并编写将重点放在新窗口上的本机应用程序(如果它不是个人扩展,那么您必须要求您的用户也安装本机消息传递主机)。