ElectronJS, JavaScript и Python - требуется не определено перепробовал все варианты - PullRequest
0 голосов
/ 03 сентября 2018

У меня проблема при попытке выполнить следующую строку:

var path = require('path') 

я получаю

Uncaught ReferenceError: require is not defined

все работает нормально, кроме как из-за ошибки, почему?

У меня есть 3 файла:

translate.js:

function get_translate(){
var path = require('path') 
var trans = document.getElementById("trans").value
document.getElementById("trans").value = ""

var options = {
scriptPath : path.join(__dirname, '/../engine/'),
args : [trans]
}
translate = PythonShell.run('translate_engine.py', options);
translate.on('message', function(message) {
swal(message);
})
}

translate.html:

<head>
<link rel="stylesheet" 
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<script 
src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"> 
</script>
<script src="linkers/translate.js"></script>
</head>

<body>
<br>
<div class="container">
<button="btn btn-info"><a style="color:white" href="gui.html">Back</a> 
</button>

<div class="jumbotron">
  <h1>Translate App</h1>
  <br>
  <label>Enter you word here</label>
  <input id="trans" type="text" placeholder="Text"/>
  <button class="but but-success" onclick="get_translate()">Go</button>
</div>
</body>

translate_engine.py:

import sys
trans = sys.argv[1]
print(trans)
sys.stdout.flush()

благодарственное в

1 Ответ

0 голосов
/ 06 сентября 2018

Вы пытаетесь выполнить этот код в электронном BrowserWindow?

Если да, проверьте, не установлено ли nodeIntegration на false при запуске BrowserWindow.

mainWindow = new BrowserWindow({
  minWidth: 370,
  minHeight: 520,
  webPreferences: {
    nodeIntegration: true,
  },
});

nodeIntegration на самом деле true по умолчанию, так что вы также можете удалить эту строку - я просто пытаюсь сделать ее супер очевидной;)

Пока nodeIntegration равен true, вы можете запускать любой код nodeJS в процессе рендеринга электронов.

Это выходит за рамки вашего первоначального вопроса и немного более продвинуто, но если вы не хотите включать это, поскольку оно сопровождается многочисленными проблемами безопасности , вы можете просто предоставить определенные методы nodeJS для Процесс рендеринга. Вы можете сделать это с помощью скрипта предварительной загрузки.

mainWindow = new BrowserWindow({
  ...
  webPreferences: {
    nodeIntegration: false,
    preload: path.join(__dirname, 'preload.js') // here you can re-expose certain methods such as `require`
  },
});

preload String (необязательно) - указывает скрипт, который будет загружен до запуска других скриптов на странице. Этот скрипт всегда будет иметь доступ к API узлов независимо от того, включена ли интеграция узлов. Значение должно быть абсолютным путем к файлу скрипта. Когда интеграция узлов отключена, сценарий предварительной загрузки может повторно ввести глобальные символы Node обратно в глобальную область.

Больше информации можно найти здесь: https://electronjs.org/docs/api/process#event-loaded

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