未能注销 class Chrome_WidgetWin_0。错误

Failed to unregister class Chrome_WidgetWin_0. Error

背景

我正在使用 Elixir Desktop 制作一个 elixir 桌面应用程序: https://github.com/elixir-desktop/desktop

并且我能够成功启动和管理我的应用程序。但是,当我关闭它时,我总是会收到此错误:

[1224/050609.437:ERROR:window_impl.cc(115)] Failed to unregister class Chrome_WidgetWin_0. Error = 203

问题

这里其实有两个问题

  1. 在我按下 Quit 后,应用程序需要很长时间才能关闭。 Phoenix 收到消息(请参阅 Ì AM LEAVING 日志)但由于某种原因 window 需要几秒钟才能关闭。
  2. 我收到前面提到的错误

代码

此时这个 HelloWorld 项目的 90% 是由 mix 生成的代码。我只更改了 2 个可能与此处相关的文件:

menubar.ex

defmodule WebInterface.MenuBar do
  @moduledoc """
    Menubar that is shown as part of the main Window on Windows/Linux. In
    MacOS this Menubar appears at the very top of the screen.
  """
  import WebInterface.Gettext
  use Desktop.Menu
  alias Desktop.Window

  @impl Desktop.Menu
  def render(assigns) do
    ~H"""
    <menubar>
      <menu label={gettext("File")}>
          <hr/>
          <item onclick="quit"><%= gettext "Quit" %></item>
      </menu>
      <menu label={gettext("Extra")}>
          <item onclick="browser"><%= gettext "Open Browser" %></item>
      </menu>
    </menubar>
    """
  end

  @impl Desktop.Menu
  def handle_event("quit", menu) do
    IO.puts("I AM LEAVING")
    Window.quit()
    {:noreply, menu}
  end

  def handle_event("browser", menu) do
    WebInterface.Endpoint.url()
    |> Window.prepare_url()
    |> :wx_misc.launchDefaultBrowser()

    {:noreply, menu}
  end

  @impl Desktop.Menu
  def mount(menu) do
    {:ok, menu}
  end

  @impl Desktop.Menu
  def handle_info(:changed, menu) do
    {:noreply, menu}
  end
end

applications.ex

defmodule WebInterface.Application do
  # See https://hexdocs.pm/elixir/Application.html
  # for more information on OTP Applications
  @moduledoc false

  use Application

    alias Desktop

  @impl true
  def start(_type, _args) do
    children = [
      WebInterface.Telemetry,
      {Phoenix.PubSub, name: WebInterface.PubSub},
      WebInterface.Endpoint,
      {Desktop.Window,
       [
         app: :web_interface,
         id: WebInterface,
         title: "Web Interface",
         size: {600, 500},
         menubar: WebInterface.MenuBar,
         url: &WebInterface.Endpoint.url/0
       ]}
    ]

    opts = [strategy: :one_for_one, name: WebInterface.Supervisor]
    Supervisor.start_link(children, opts)
  end

  @impl true
  def config_change(changed, _new, removed) do
    WebInterface.Endpoint.config_change(changed, removed)
    :ok
  end
end

我希望这个错误是由于配置错误或我没有正确实现的某些功能引起的。

我该如何解决这个错误?

回答

在撰写本文时,作者在 Github 中推送了对 Master 的修复。 此修复解决了应用程序关闭时间过长的问题,但未解决 Chrome_WidgetWin_0. Error 问题。

这个问题是已知的并且已经被报告过,但是没有迹象表明 Chrome 项目已经解决了它,所以我想我们暂时只能接受它: https://bugs.chromium.org/p/chromium/issues/detail?id=113008

另一个问题是崩溃。很可能是因为上一期的缘故,所以这里也无能为力了。

由于主要问题已解决,我将其标记为已解决。