nw.Screen Не определено в NWJS 0.14.7 (LTS) - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть приложение, построенное на NWJS v0.14.7 (LTS), для которого мне было поручено добавить некоторые функции.В package.json для 'main' установлено значение index.html, а в index.html основной js-файл приложения загружается с помощью тега , создается иконка в трее, а затем он пытается расположить окноиспользуя следующий код:

    // position
    nw.Screen.Init();
    var NW_WIN = nw.Window.get();
    var NW_SCR = nw.Screen.screens[0];
    NW_WIN.moveTo((NW_SCR.bounds.x+NW_SCR.bounds.width)-400, 
    (NW_SCR.bounds.y+NW_SCR.bounds.height)-240);

Похоже, это работает, поскольку окно всегда располагается в правом нижнем углу экрана при открытии, независимо от того, куда вы его перемещаете, прежде чем снова открывать приложение, однако, когдаЯ отлаживаю, получаю в консоли SDK следующее:

    extensions::nw.Screen:62 (BLESSED_EXTENSION context for example.com) No source for require(desktopCapture)(anonymous function) @ extensions::nw.Screen:62
    extensions::nw.Screen:62 (BLESSED_EXTENSION context for example.com) try_catch has no message{<stack trace unavailable>}(anonymous function) @ extensions::nw.Screen:62
    index.html:135 (BLESSED_EXTENSION context for example.com) extensions::nw.Screen:62: Uncaught TypeError: Cannot read property 'chooseDesktopMedia' of undefined{TypeError: Cannot read property 'chooseDesktopMedia' of undefined
        at extensions::nw.Screen:62:50
        at chrome-extension://example.com/src/index.html:135:15}(anonymous function) @ index.html:135
    index.html:135 (BLESSED_EXTENSION context for example.com) try_catch has no message{<stack trace unavailable>}(anonymous function) @ index.html:135
    extensions::nw.Screen:62(BLESSED_EXTENSION context for example.com) No source for require(desktopCapture)(anonymous function) @ extensions::nw.Screen:62onload @ index.html:141
    extensions::nw.Screen:62(BLESSED_EXTENSION context for example.com) try_catch has no message{<stack trace unavailable>}(anonymous function) @ extensions::nw.Screen:62onload @ index.html:141
    index.html:141 (BLESSED_EXTENSION context for example.com) extensions::nw.Screen:62: Uncaught TypeError: Cannot read property 'chooseDesktopMedia' of undefined{TypeError: Cannot read property 'chooseDesktopMedia' of undefined
        at extensions::nw.Screen:62:50
        at onload (chrome-extension://example.com/src/index.html:141:31)}onload @ index.html:141
    index.html:141 (BLESSED_EXTENSION context for example.com) try_catch has no message{<stack trace unavailable>}

Я просмотрел документы (URL для следования) и искал все, что мог, но не мог понятькак это исправить.Из того, что я могу сказать, nw.Screen должен поддерживаться в 0.14.7.Исходя из кода, показанного выше, я даже не могу сказать, почему вызывается chooseDesktopMedia.

Ссылка на документы: http://docs.nwjs.io/en/latest/References/Screen/#screenchoosedesktopmedia-sources-callback

Редактировать:

Я пробовализменив код просто так:

    try {
        var gui = require("nw.gui");
        gui.Screen.Init();
    } catch (e) {
        console.error(e);
    }

, и я все еще получаю те же ошибки:

extensions::nw.Screen:62 (BLESSED_EXTENSION context for example.com) No source for require(desktopCapture)(anonymous function) @ extensions::nw.Screen:62
extensions::nw.Screen:62 (BLESSED_EXTENSION context for example.com) try_catch has no message{<stack trace unavailable>}(anonymous function) @ extensions::nw.Screen:62
index.html:135 (BLESSED_EXTENSION context for example.com) extensions::nw.Screen:62: Uncaught TypeError: Cannot read property 'chooseDesktopMedia' of undefined{TypeError: Cannot read property 'chooseDesktopMedia' of undefined
    at extensions::nw.Screen:62:50
    at chrome-extension://example.com/src/index.html:135:10}(anonymous function) @ index.html:135
index.html:135 (BLESSED_EXTENSION context for example.com) try_catch has no message{<stack trace unavailable>}(anonymous function) @ index.html:135
index.html:137 TypeError: Cannot read property 'Init' of undefined(…)

Редактировать 2:

Я оставляю это открытым, потому что яХотелось бы знать, почему это не работает, когда должно, но в случае, если на него не получен ответ, и кто-то еще находит это, я решил проблему, просто используя window.screen, о котором я не знал:

// position
NW_WIN.moveTo((screen.width - 400), screen.height - 240);

Я даже не могу найти это нигде, но window.screen возвращает мне следующий объект:

{
    availHeight: 860,
    availLeft: 0,
    availTop: 0,
    availWidth: 1600,
    colorDepth: 24,
    height: 900,
    orientation: {
        angle: 0,
        onchange: null,
        type: "landscape-primary"
    },
    pixelDepth: 24,
    width: 1600
}
...