前提・実現したいこと
ここに質問の内容を詳しく書いてください。
ドットインストール講座でElectronを勉強している最中です。
https://dotinstall.com/lessons/basic_electron/36214
settings.htmlのラジオボタンでユーザーが色を選択し、それを取得し、IPC通信でindex.jsに送信し、index.htmlで背景色が変わる機能を作ろうと考えていました。
発生している問題・エラーメッセージ
エラーメッセージ Uncaught ReferenceError: require is not defined at index.html:25 Uncaught ReferenceError: require is not defined at settings.html:38
該当のソースコード
JavaScript
1index.html:25 2 const electron = require('electron'); 3 const ipcRenderer = electron.ipcRenderer; 4settings.html:38 5 const electron = require('electron'); 6 const ipcRenderer = electron.ipcRenderer;
また、上記以外のIPC通信に関するコードは以下の通りです。
Javascript
1index.js 13 2const ipcMain = electron.ipcMain; 3 4index.js 30 5ipcMain.on('settings_changed', function(event, color) { 6 mainWindow.webContents.send('set_bgcolor', color); 7}); 8 9index.html 43 10 ipcRenderer.on('set_bgcolor', function(event, color) { 11 document.body.style.backgroundColor = color; 12 }); 13 14settings.html 41 15let colors = document.getElementsByName('colors'); 16 for (let i = 0; i < colors.length; i++) { 17 colors[i].addEventListener('change', function() { 18 let color = this.value; 19 // console.log(color); 20 // settings.html -> index.js -> index.html 21 // ipc 22 ipcRenderer.send('settings_changed', color); 23 }); 24 } 25
試したこと
npm install require 6 packages are looking for funding run `npm fund` for details found 2 low severity vulnerabilities run `npm audit fix` to fix them, or `npm audit` for details
npm audit fix npm WARN MyApp_copy@1.0.0 No description npm WARN MyApp_copy@1.0.0 No repository field. up to date in 0.441s 6 packages are looking for funding run `npm fund` for details fixed 0 of 2 vulnerabilities in 95 scanned packages 2 vulnerabilities required manual review and could not be updated
npm fund MyApp_copy@1.0.0 ├─┬ https://opencollective.com/core-js │ └── core-js@3.13.1 ├─┬ https://github.com/sponsors/sindresorhus │ └── serialize-error@7.0.1, escape-string-regexp@4.0.0, type-fest@0.13.1, get-stream@5.2.0 └─┬ https://github.com/sponsors/ljharb └── globalthis@1.0.2
補足情報(FW/ツールのバージョンなど)
index.jsでもrequire('electron')を使ってたいたが特に問題なかった
Javascript
1const electron = require('electron'); 2const app = electron.app; 3const BrowserWindow = electron.BrowserWindow; 4const Menu = electron.Menu; 5const dialog = electron.dialog; 6const ipcMain = electron.ipcMain;
package.jsonより
"devDependencies": { "electron": "^13.0.1" }, "dependencies": { "require": "^2.4.20" }
=============追記==============
ipc通信の書き方に関する書き方が古いというご意見をいただいたので、次の記事を参考にしてもやはりエラーが出てしまいます。
https://qiita.com/pochman/items/62de713a014dcacbad68
以下を確認しても、書き方に特に問題はないように見える
https://github.com/electron/electron/blob/main/docs/api/ipc-main.md
https://github.com/electron/electron/blob/main/docs/api/ipc-renderer.md
###発生している問題・エラーメッセージ
Uncaught TypeError: Cannot read property 'send' of undefined at HTMLInputElement.<anonymous> (settings.html:45)
###該当のソースコード
JS
1index.js 2 3const { app, BrowserWindow,Menu,dialog,ipcMain } = require('electron'); 4 5ipcMain.on('settings_changed', (event, ...args)=> { 6 mainWindow.webContents.send('set_bgcolor', color); 7}); 8 9function createMainWindow() { 10 mainWindow = new BrowserWindow({ 11 width: 600, 12 height: 400, 13 webPreferences: { 14 nodeIntegration: false, 15 contextIsolation: true, 16 preload: __dirname + '/preload.js' 17 }, 18 });
JS
1preload.js 2 3const { contextBridge, ipcRenderer} = require("electron"); 4contextBridge.exposeInMainWorld( 5 "api", { 6 send: (channel, data) => {//rendererからの送信用// 7 ipcRenderer.send(channel, data); 8 }, 9 on: (channel, func) => { //rendererでの受信用, funcはコールバック関数// 10 ipcRenderer.on(channel, (event,...args) => func(...args)); 11 } 12 } 13);
html
1index.html 2 3 window.api.on('set_bgcolor', (color)=>{ 4 document.body.style.backgroundColor = color; 5 });//receive //ここで何か表記ミスした
html
1settings.html 2 3 <script > 4 'use strict'; 5 6 let colors = document.getElementsByName('colors'); 7 for (let i = 0; i < colors.length; i++) { 8 colors[i].addEventListener('change', function() { 9 let color = this.value; 10 // console.log(color); 11 // settings.html -> index.js -> index.html 12 // ipc 13 window.api.send('settings_changed', color); 14 }); 15 } 16 </script>
JS
1package.json 2 3 "devDependencies": { 4 "electron": "v6.14.13" 5 }, 6 "dependencies": { 7 "require": "^6.14.13" 8 }
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。