Skip to content

3 修正不能启动的问题

msojocs edited this page Apr 27, 2022 · 2 revisions

本节主要进行修正上节中无法正常启动项目的问题。

前言

nwjs是一个基于浏览器的,所以理论上会有一个开发者工具,调出开发者工具看看都发生了些什么错误。

调出开发者工具

尝试按F12没有反应,右键点击没有反应。

搜索nwjs文档 搜索结果

发现可以通过 --disable-devtools 参数禁用开发者工具,

检查 package.nw 文件,确实在 chromium-args 一项中包含有此参数,删除;

再启动,按F12,可以调出开发者工具了。

修正

  1. 我们先尝试使用旧版nwjs是否可行

    经过降级测试,发现0.47.0能够打开项目,0.47.1却不行。

    打开图

  2. 我们检查nwjs的更新日志,看看这个版本过渡发生了什么。

    https://github.com/nwjs/nw.js/blob/nw63/CHANGELOG.md#0471--07-24-2020

    0.47.1 / 07-24-2020

    Update Node.js to v14.6.0

    Fix: Window opened with new_instance creates always mixed context (#7344)

    [docs] add clang option for building Node

    可以发现,这里有个 fix 记录,进入相关 issue 查看

    发现相关信息:

    Expected behavior

    When new window is opened with window.open and new_instance, it should open just as normal window.open as browser window context.

    这个 issue 目的是在创建 new_instance 之后,新窗口是普通窗口而非 nwjs 的窗口。

    也就是说,开发者工具使用 0.47.0 之后的 nwjs 时:

    打开项目(新窗口)会出现 nw 未定义(因为新窗口是普通窗口)。

  3. 于是我们需要找到一个方法让新窗口还是 nw 的方法。

    浏览回复,发现一条指向文档的链接 JavaScript Contexts in NW.js

    浏览文档可以看到有一个标题 Mixed Context Mode

    查看相关内容:

    Load Script in Mixed Context Mode

    To enable Mixed context, add --mixed-context when starting NW.js or add it to chromium-args in Manifest file.

    chromium-args 值中添加 --mixed-context 即可启用 Mixed context。

  4. 添加参数值后启动,发现在显示标题菜单后,会出现崩溃现象

    虽然崩溃了,但从标题菜单显示可以证明这个参数是有效的

    崩溃部分内容如下,看样子是这个参数导致内部出现问题。

    可以尝试提升 nwjs 版本看有没有修复这个问题的。

    node[201811]: ../../third_party/node-nw/src/api/callback.cc:66:node::InternalCallbackScope::InternalCallbackScope(node::Environment *, Local<v8::Object>, const node::async_context &, int): Assertion `(Environment::GetCurrent(env->isolate())) == (env)' failed.
    1: 0x7f3185622a55 node::Abort() [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnode.so]
    2: 0x7f3185622891  [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnode.so]
    3: 0x7f3185574831 node::InternalCallbackScope::InternalCallbackScope(node::Environment*, v8::Local<v8::Object>, node::async_context const&, int) [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnode.so]
    4: 0x7f31855cbf66 node::Environment::RunAndClearNativeImmediates(bool) [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnode.so]
    5: 0x7f3185a063ab  [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnode.so]
    6: 0x7f3185a16adb  [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnode.so]
    7: 0x7f3185a06921 uv_run [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnode.so]
    8: 0x7f31920fd231  [/mnt/disk2/wechat-devtools/wechat-devtools-for-wiki/nwjs0492/lib/libnw.so]
    
  5. 经过升级 nwjs 版本测试,v0.53.1 版本正常启动。

Clone this wiki locally