Заголовок электронного окна загружается за несколько секунд (показывает название проекта перед загрузкой) - PullRequest
1 голос
/ 30 апреля 2019

Когда я запускаю свой код с помощью npm start, требуется несколько секунд, прежде чем заголовок main_window будет полностью загружен. Вот GIF, демонстрирующий это:

wtf

Это мой код:

const electron = require('electron')
const url = require('url')
const path = require('path')

const {app, BrowserWindow, Menu} = electron

let main_window

app.on('ready', function() {
    main_window = new BrowserWindow({})
    main_window.loadURL(url.format({
        pathname: path.join(__dirname, 'main_window.html'),
        protocol: 'file:',
        slashes: true
    }))

    Menu.setApplicationMenu(null)
})

Перед загрузкой заголовка, который я указал в моем main_window.html, отображается название проекта, который я указал в моем package.json. Я не думаю, что содержание этих двух файлов является уместным, но вот они в любом случае:

main_window.html

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>7Watchlist Data Grabber</title>
    </head>
    <body>
        <h1>Another Collection of Web Crawlers</h1>
    </body>
</html>

package.json

{
  "name": "datagrabber",
  "version": "1.0.0",
  "description": "Another Collection of Web Crawlers",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/amirashabani/DataGrabber.git"
  },
  "author": "Amir A. Shabani",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/amirashabani/DataGrabber/issues"
  },
  "homepage": "https://github.com/amirashabani/DataGrabber#readme",
  "dependencies": {
    "electron": "^5.0.0"
  }
}

Это то, что я должен принять? Я не думаю, что это нормальное поведение.

Edit1: установка sandbox на true или запуск приложения с npm start --no-proxy-resolver (как предложено @ Mr. Polywhirl ), похоже, не имеет значения:

sandbox and --no-proxy-resolver

Ответы [ 3 ]

1 голос
/ 30 апреля 2019

Другой вариант, кроме sandbox = true и --no-proxy-resolver, как упомянуто г-ном Поливирл, - это непосредственно установить заголовок . Указанный заголовок будет использоваться до тех пор, пока страница не будет отображена, и Chromium сможет отображать содержимое HTML <title>.

main_window = new BrowserWindow ({
    title: "7Watchlist Data Grabber"
});

Это решение не помешает вашему коду получить доступ к API-интерфейсам NodeJS, поскольку оно не создает изолированную программную среду. Однако подход «песочницы» является значительным, поскольку он также более безопасен.

1 голос
/ 30 апреля 2019

Это то, что я должен принять? Я не думаю, что это нормальное поведение.

Это нормальное поведение, так как время жизни вашего BrowserWindow не совпадает с временем жизни вашего HTML (DOM). Вы можете загружать URL-адрес в BrowserWindow несколько раз и выполнять множество других задач, не связанных с HTML.

Так что я не думаю, что разумно ожидать, что BrowserWindow будет следовать состоянию DOM вашего HTML. Однако вы можете сделать это таким образом

Используйте 'dom-ready' или 'ready-to-show' события, чтобы избежать отображения чего-либо до полной загрузки HTML (включая заголовок исходного окна)

Из документов

const { BrowserWindow } = require('electron')
let win = new BrowserWindow({ show: false })
win.once('ready-to-show', () => {
  win.show()
})
0 голосов
/ 30 апреля 2019

Набор webPreferences.sandbox до true для вашего BrowserWindow.

Ссылка: nodeJS / Electron отображает страницы медленнее, чем Chrome

main_window = new BrowserWindow({
  webPreferences: {
    sandbox: true
  }
})

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

Еще одно предложение - запускать приложение с флагом --no-proxy-resolver.

См .: https://github.com/electron/electron/issues/12895

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...