4

我正在开发 Chrome 扩展程序,有时我需要退出浏览器的进程。

我尝试使用以下代码关闭所有窗口:

chrome.windows.getCurrent({}, function(window) {
    chrome.windows.remove(window.id);
});

它适用于 Windows 和 Linux,但不适用于 Mac(因为在 Mac 上,关闭所有窗口并不意味着关闭浏览器)。

有没有办法从扩展程序中关闭浏览器?

谢谢。

4

3 回答 3

10

安装最先进的 Chrome 版本(如果从开发通道获取或使用 Canary)并创建一个使用chrome.processesAPI 的扩展程序。

似乎浏览器的进程 ID 为 0。因此,以下代码将终止 Chrome:

chrome.processes.terminate(0);

但是,由于没有记录,我建议获取进程列表,遍历列表并终止浏览器的进程:

chrome.processes.getProcessInfo([], false, function(processes) {
    processes.forEach(function(process) {
        if (process.type === 'browser') {
            chrome.processes.terminate(process.id);
        }
    });
});

适用于所有 Chrome 版本的替代方法:

  • 创建一个NPAPI插件并杀死 Chrome。
  • 托管您选择的本地服务器,在 (http) 请求时终止您的浏览器。
  • 安装本地应用程序并使用本机消息API 请求终止 Chrome。

这些方法不是很方便,而且所有的二进制代码和/或外部应用程序都可以工作。因此,我建议使用我在回答中概述的方法。

于 2013-08-19T15:16:28.473 回答
2

截至 2018 年:

没有任何花哨的现代答案。只是一个 chrome 扩展。
将这个坏男孩添加到您的popup.jsbrowseraction.js(随心所欲地称呼它)

chrome.tabs.query({}, function (tabs) {
  for (var i = 0; i < tabs.length; i++) {
      chrome.tabs.remove(tabs[i].id);
  }
});
window.close();

并确保将它列在manifest( JSON) 和popup( HTML) 文件中:

HTML

<html>
  <head>
    <script src="js/popup.js"></script>
  </head>
</html>

 

JSON

 ...
"browser_action": {
    "default_icon": "this part is optional.png",
    "default_title": "close chrome",    
    "default_popup": "popup.html",
    "matches": ["*://*", "*:*"]
},
 ...

这是我从哪里得到的:链接&这里是chrome-extension-manifest要求/正确的格式:链接

于 2018-12-03T07:13:42.793 回答
1

如果没有打开其他选项卡,您可以通过触发关闭当前选项卡:

chrome.tabs.getCurrent(function(tab) {
    chrome.tabs.remove(tab.id)
})

这将关闭浏览器。

于 2017-06-02T10:11:51.017 回答