Chrome 通知 onClick 转到 Tab

Chrome Notification onClick go to Tab

我有一个简单的 chrome 扩展,它从扩展的后台脚本发送通知 (https://developer.chrome.com/docs/extensions/reference/notifications/)。单击通知后,将使用 url 匹配通过 chrome.tabs.query 函数执行内容脚本。在脚本中,我一直在尝试一切以聚焦它 运行 所在的选项卡,但没有成功。

background.js:

const focusTab = () => {
  chrome.tabs.query({ url: 'myUrlMatch'}, tabs => {
    chrome.tabs.executeScript(tabs[0].id, { file: 'focustab.js' });
  });
}
// I'm calling focusTab from the chrome.notifications.onClicked listener callback. From the click until inside the below f() function everything works.

focustab.js:

function f() {
  window.focus();
  window.parent.focus();
  window.parent.parent.focus(); //just to make sure
}

setTimeout(f, 0); //superstition coming from angularJS

我不敢相信不可能将焦点放在发出通知的选项卡上。我读过有关在现代浏览器中使用 windows 和选项卡进行导航时所拥有权限的相互矛盾的内容。我读了很多关于 window.focus() 的文章,但是当我尝试在 chrome.

中尝试使用它时,似乎什么都没有发生

在我看来,这是一个相当合乎逻辑的交互,期望点击通知将您带到它来自的选项卡。 它如何与 iOS 一起使用推送通知。

让如此微不足道的事情无法工作,我做错了什么?我已经读到,由于安全问题,浏览器不允许您 focus/switch 标签等。我理解这在 运行 js 代码的一般上下文中是有意义的,但在这个特定的单击上下文中一个通知,我们在这里显然有一种用户同意和意图,我们甚至在扩展的清单文件中有一个特定的 'notifications' 权限。这一定是可能的。

任何帮助将不胜感激

发帖人以及另一位用户正确地得出以下结论:

Pure JS solutions don't have the power to do this for security reasons[, logically]

可以找到关于此的一个很好的 Security StackExchange 线程 here。附录“逻辑上”(OP 在这种情况下很好地使用了这个词)非常合适——我认为我们不需要谈论如果 可能发生的威胁pure JavaScript 有可能解决 OP 的问题,无论用户是否同意(正如他所指的)。


无论如何,在这种特定情况下的解决方案是使用后台脚本中的 chrome.tabs.highlight()chrome.windows.update()。感谢 @rails_has_elegance.

chrome.tabs.highlight(highlightInfo: object, callback: function),单击 here 获取文档。

chrome.tabs.update(tabId?: number, updateProperties: object, callback: function),再次单击 here 以全面了解文档。


出于进一步阅读的目的,我强烈建议您看一下例如this Whosebug question 处理类似的问题。 注意:用户@Mohamd Mansour的第一个答案已被弃用-已消失的window.focus()的当前吊坠是提到的chrome.tabs.highlight() 其中,如果您阅读 chrome.tabs.highlight() 的描述,也会略微提及:

Highlights the given tabs and focuses on the first of group. Will appear to do nothing if the specified tab is currently active.