Электрон не может выполнить Javascript, чтобы проверить, существует ли Div - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь проверить, существует ли div с именем класса в текущем просмотре страницы. Я попытался использовать javascript, чтобы найти элемент и отправить результат с использованием IP C, но я получил сообщение «Ошибка сценария при выполнении», и я не уверен, как решить эту проблему.

Ниже приведен мой код который открывает страницу, проверяет, присутствует ли div, выполняя javascript, отправляет результат от средства визуализации обратно в main и применяет правильный css в соответствии с тем, что было отправлено обратно. (С моим ограниченным знанием интерфейса я чувствую, что это неправильный подход).

index. js

const { app, BrowserWindow, globalShortcut } = require('electron')
const path = require('path');
const fs = require('fs');
const {ipcMain} = require('electron')

const DOMAIN_URL = "instagram.com"

let win;

function createWindow () {

  const options = {
    width: 500,
    height: 550,
    resizable: false,
    maximizable: false,
    movable: true,
    titleBarStyle: 'hiddenInset',
    title: 'InstaSend',
    webPreferences: {
            nodeIntegration: false
        },
  };

  // create main window
  win = new BrowserWindow(options)
  win.loadURL('https://'+DOMAIN_URL)

  // check if we are at the login page
  win.webContents.on('dom-ready', function (e) {
    win.webContents.executeJavaScript(`
      var ipcRenderer = require('electron').ipcRenderer;
      var hasLogin = document.getElementsbyClassName("gr27e")[0];
      ipcRenderer.send('checkLogin', hasLogin)
    `);
    });

  ipcMain.on('checkLogin', function(event, hasLogin){
    console.log(hasLogin);
    if(!hasLogin){
      win.resizable = true
      win.maximizable = true
      win.setSize(1100,950, true)
      win.webContents.insertCSS(fs.readFileSync(path.join(__dirname, '/assets/dash.css'), 'utf8'));
    }else{
      win.webContents.insertCSS(fs.readFileSync(path.join(__dirname, '/assets/ig.css'), 'utf8'));
    }

  })
}

app.on('ready', function(){
  createWindow()
});

ошибка вывода:

internal/process/warning.js:27 (node:89911) UnhandledPromiseRejectionWarning: Error: Script failed to execute, this normally means an error was thrown. Check the renderer console for the error.
    at WebFrame../lib/renderer/api/web-frame.ts.WebFrame.<computed> [as executeJavaScript] (electron/js2c/renderer_init.js:1590:33)
    at electron/js2c/renderer_init.js:2844:43
    at EventEmitter.<anonymous> (electron/js2c/renderer_init.js:2419:57)
    at EventEmitter.emit (events.js:210:5)
    at Object.onMessage (electron/js2c/renderer_init.js:2188:16)
writeOut @ internal/process/warning.js:27
2internal/process/warning.js:27 (node:89911) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
writeOut @ internal/process/warning.js:27
2internal/process/warning.js:27 (node:89911) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

1 Ответ

0 голосов
/ 04 апреля 2020

Вы должны установить nodeIntegration в true. В противном случае вы не можете использовать require.

webPreferences: {
            nodeIntegration: true
        },

Кроме того, у вас есть опечатка, пожалуйста, проверьте прописные буквы, чтобы написать getElementsByClassName

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