是一个电子BrowserWindow ID保证在应用程序的生命周期中是唯一的?

时间:2018-03-22 17:01:17

标签: electron

如果我的电子应用程序打开并关闭了大量BrowserWindow个,那么每个应用程序是否都有唯一ID?

因此,在我的应用的一次运行中,如果我打开BrowserWindow并关闭它,则打开一个新的BrowserWindow:新的BrowserWindow是否有可能和我关闭的那个id相同吗?

1 个答案:

答案 0 :(得分:1)

您可以根据当前来源(1.8.4版本或2.0.0-beta.5)获得每个实例的唯一ID

在本机端BrowserWindow实现继承自实际处理ID的TrackableObjectwin.id API看起来像this

int32_t Window::ID() const {
  return weak_map_id();
}

weak_map_id()返回的ID在TrackableObject中构建,如this

weak_map_id_ = ++next_id_;
weak_map_->Set(isolate, weak_map_id_, wrapper);

其中next_id_是可跟踪实例的静态成员,永远不会减少。

因此,无论删除如何,浏览器ID都应始终在应用程序的整个运行期间保持递增。

以下愚蠢的例子证实了行为

const { app, BrowserWindow } = require('electron')
let win = null
app.once('ready', () => {
  setInterval(() => {
    win = new BrowserWindow()
    console.log(win.id)
  }, 1000)
  setInterval(() => {
    win.destroy()
  }, 2100)
})