开发者问题收集

Electron.js:需要远程模块不允许脚本运行

2021-10-03
301

我想为我的无框窗口添加带有自定义按钮的自定义标题。

我有两个脚本文件 - index.js ,它在 Electron 启动时自动运行,以及 app.js ,它使用 <script src> 标签添加到 index.html 中。

有一个问题 - require() 不允许脚本工作 - 如果我需要任何模块,则没有任何行运行,不管它是什么。

index.html:

<head>
    ...
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
    <script src="app.js"></script>
    ...
</head>

index.js

const {app, BrowserWindow} = require('electron')
const path = require('path')
const sass = require('sass')
const fs = require('fs')

// Creates a main window
function createWindow () {
    renderStylesheets()
    let mainWindow = new BrowserWindow({
        width: 800,
        height: 600,
        resizable: true,
        transparent: true,
        frame: false,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js')
        }
    })
    mainWindow.loadFile('index.html').then(() => {})
}

...

app.js

alert("This alert won't show.")

// If I remove these lines, alerts and jQuery's "$(callback)" will run, but
// button actions won't work :(
const { BrowserWindow, app } = require('electron').remote;
let window = BrowserWindow.getFocusedWindow();

alert("This alert won't show and the $(() => {}) won't run too.")

...
2个回答

问题出在哪里?如果问题出在 index.html 中,则问题出在所显示内容的第 4 行。请确保您引用了正确的网站,并且引用了正确的数据。

如果问题出在 index.js 中,则问题可能出在所显示内容的第 8 行,因为您需要确保在第 8 行之前提到或声明了变量“app”的值。

这是我立即看到的可能导致此问题的唯一两件事。

希望这能有所帮助。

humnhilightr
2021-10-03

问题是 app.js 和任何其他脚本都没有 require 函数。为了在主脚本之外添加对 Node.js 函数的访问,我将 nodeIntegration: truecontextIsolation: false 设置为窗口初始化程序:

mainWindow = new BrowserWindow({
        width: 900,
        height: 600,
        resizable: true,
        transparent: true,
        show: true,
        frame: false,
        center: true,
        webPreferences: {
            preload: path.join(__dirname, 'preload.js'),
            nodeIntegration: true,    // <- This one
            contextIsolation: false,  // <- And this one
        }
    })
Vega TV
2021-10-07