web-dev-qa-db-ja.com

Electron require()が定義されていません

私は自分の目的のためにElectronアプリを作成しています。私の問題は、HTMLページ内でノード関数を使用すると、次のエラーがスローされることです。

'require()'は定義されていません。

すべてのHTMLページでNode機能を使用する方法はありますか?可能であれば、これを行う方法の例またはリンクを提供してください。 HTMLページで使用しようとしている変数は次のとおりです。

  var app = require('electron').remote; 
  var dialog = app.dialog;
  var fs = require('fs');

これらは、Electron内のすべてのHTMLウィンドウで使用している値です。

33
Mari Selvan

バージョン5では、nodeIntegrationのデフォルトがtrueからfalseに変更されました。ブラウザウィンドウの作成時に有効にできます。

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

セキュリティ上の理由から、nodeIntegration:falseを保持し、プリロードスクリプトを使用して、Node/Electron APIからレンダラープロセスに必要なものだけを公開する必要があります(表示)ウィンドウ変数経由。

プリロードスクリプトは引き続きrequireおよびその他のNode.js機能にアクセスできます

https://electronjs.org/docs/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content

例:

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

preload.js:

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

let currWindow = remote.BrowserWindow.getFocusedWindow();

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

renderer.js:

let closebtn = document.getElementById('closebtn');

closebtn.addEventListener('click', (e) => {
  e.preventDefault();
  window.closeCurrentWindow();
});
8
Rafael Croffi

BrowserWindowの初期化中にnodeIntegration: falseを使用していますか?その場合は、trueに設定します(デフォルト値はtrueです)。

そして、外部スクリプトを次のようにHTMLに含めます(<script> src="./index.js" </script>としてではありません):

<script>
   require('./index.js')
</script>
8
RoyalBingBong

最後に、このコードをHTMLドキュメントのScript Elementに追加しました。

遅いReply.Iで申し訳ありませんが、私はこのことを行うために以下のコードを使用します。

window.nodeRequire = require;
delete window.require;
delete window.exports;
delete window.module;

nodeRequireを使用する代わりにrequireを使用します。

それはうまく動作します。

0
Mari Selvan