未捕获的ReferenceError:需求未定义-Electron JS

时间:2019-08-04 01:12:43

标签: javascript html electron

我第一次与js和node同时使用电子,我正在尝试为业余爱好和知识申请。 在实施脚本以打开外部链接时遇到了问题。

我一直在使用doc来解决此问题,但是我没有发现任何可以帮助我解决该问题的方法。

我的 ex-links.js

const electron = require("electron");
const { shell } = electron;
const exLinkBtn = document.getElementById("open-ex-link");
exLinkBtn.addEventListener("click", function() {
  shell.openExternal("https://www.youtube.com/watch?v=ifXalt3MJtM");
});

我已经尝试过将slideler.html放置在index.html中,但是仍然遇到该错误,所以我将其保留为当前在iframe中的位置。

<iframe src="slider.html" frameborder=0 width="1180" height="728" style="padding-left:198.5px;"></iframe>

我希望通过单击打开外部链接按钮,它将在默认浏览器中打开链接。

1 个答案:

答案 0 :(得分:0)

默认nodeIntegration值为false。因此,您可以将其设置为true来解决该问题。

app.on('ready', () => {
    mainWindow = new BrowserWindow({
        webPreferences: {
            nodeIntegration: true
        }
    });
});

但是,当您在应用程序上执行一些不受信任的远程代码时,nodeIntegration: true会带来安全风险。例如,当您的应用程序打开第三方网页时,这将带来安全风险,因为第三方网页将有权访问节点运行时并可以在用户的​​文件系统上运行恶意代码。因此,将nodeIntegration: false设置为当前默认值是很有意义的。

您可以使用预加载脚本,因为它们可以访问require和其他Node.js功能。

index.js就像:

const mainWindow = new BrowserWindow({
  webPreferences: {
    preload: path.join(app.getAppPath(), 'preload.js')
  }
})

preload.js就像:

const { remote } = require('electron');

let currentWindow = remote.BrowserWindow.getFocusedWindow();

window.closeCurrentWindow = function(){
  currentWindow.close();
}