Javascript onClosed()在使用X关闭Chrome应用程序时未触发

Javascript onClosed()在使用X关闭Chrome应用程序时未触发,javascript,google-chrome,manifest,google-chrome-app,Javascript,Google Chrome,Manifest,Google Chrome App,Background.js: chrome.app.runtime.onLaunched.addListener(function() { console.log('launched'); chrome.app.window.create('index.html', { innerBounds: { width: 800, height: 600, minWidth: 200, minHeight: 200, } });

Background.js:

chrome.app.runtime.onLaunched.addListener(function() {
  console.log('launched');
  chrome.app.window.create('index.html', {
    innerBounds: {
      width: 800,
      height: 600,
      minWidth: 200,
      minHeight: 200,
    }
  });
})

chrome.app.window.onClosed.addListener(function() {
    console.log('close bg');
});
mainfest.json:

{
  "name": "xxx",
  "description": "xxx",
  "version": "3.4.0",
  "manifest_version": 2,
  "icons": {
    "16": "16.png",
    "48": "48.png",
    "128": "128.png"
  },
  "permissions": [
    {"socket": [
      "tcp-listen:*:*", 
      "tcp-connect", 
      "resolve-host", 
      "udp-bind:*:*", 
      "udp-send-to:*:*"
    ]}
  ],

  "app": {
    "background": {
      "scripts": ["background.js"]
    }
  }
}
我试图在用户使用红色X时检测Chrome应用程序窗口的关闭。但是,“close bg”控制台日志从未出现,因此我认为它不会启动

我错过了什么


我已经更新了我的
.json
,以包含一个持久的背景页面。我想可能bg页面快到触发事件的速度了

{
  "name": "xxx",
  "description": "xxx": "3.4.0",
  "manifest_version": 2,
  "icons": {
    "16": "16.png",
    "48": "48.png",
    "128": "128.png"
  },
  "permissions": [
    {"socket": [
      "tcp-listen:*:*", 
      "tcp-connect", 
      "resolve-host", 
      "udp-bind:*:*", 
      "udp-send-to:*:*"
    ]}
  ],

  "app": {
    "background": {
      "page": "background.html",
      "persistent": true
    }
  }
}
我在下面添加了用户的“获取”想法:

chrome.app.runtime.onLaunched.addListener(function() {
  console.log('launched');
  chrome.app.window.create('index.html', {
      id:'cci',
    innerBounds: {
      width: 800,
      height: 600,
      minWidth: 200,
      minHeight: 200,
    }
  });
})


chrome.app.window.get('cci').onClosed.addListener(function() {
        console.log('close bg');
});
然而,在启动时,我得到了这个错误。我认为分配ID的速度不够快,因此“cci”无效

“chrome.app.window.current().onClosed允许您在窗口关闭时注册事件侦听器。”

在这里找到答案:

编辑: 文件:

国家:

窗口关闭时激发。请注意,这应该从正在关闭的窗口以外的窗口收听,例如从背景页。这是因为当触发事件时,关闭的窗口将处于被拆除的过程中,这意味着窗口脚本上下文中的所有API都不能正常工作


您需要将侦听器附加到特定的窗口,以使其工作,而不是附加到chrome.app.window全局对象。chrome.app.window.create()函数中的第三个参数允许您指定一个回调,该回调将接收新创建的窗口对象作为参数

chrome.app.runtime.onLaunched.addListener(function() {
  console.log('launched');
  chrome.app.window.create('index.html', {
    innerBounds: {
      width: 800,
      height: 600,
      minWidth: 200,
      minHeight: 200,
    }
  }, function(window){
      window.onClosed.addListener(function() {
        console.log('close bg');
      });
  });
})

我添加了一个eventListener,它应该在窗口关闭时输出到控制台,但它没有这样做:“chrome.app.window.get(windowIDUsedToCreateChildWindow).onClosed.addListener(function(){…})”文档有点误导。根据说明chrome.app.window.current().onClosed应该在后台为任何窗口触发(不通过ID获取它)。。。但事实并非如此先生你是我的英雄