質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

2回答

2638閲覧

ElectronでIPC通信を実装したらrequire is not definedとエラーが発生した

bishopfunc

総合スコア0

Electron

Electronは、HTML5とNode.jsというWebの技術を用いてデスクトップアプリケーションを作成できるクロスプラットフォームな実行環境です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

ラジオボタン

ラジオボタンはフォームに使われる要素のひとつであり、ユーザに限られた選択肢からひとつの答えを選んでもらうというものです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2021/06/03 01:54

編集2021/06/04 23:14

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
ドットインストール講座で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 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ドットインストールは昨年の大改編に対応していないのでお勧めできないです! (質問もクローズされていました)
同じエラーは多くのところで質問されているので、ヒントとしては、他の英語のサイトやUdemyの講座でElectronを学ぶのがお勧めです。もしわかったら他の方の質問にも答えてあげてくださいね。

投稿2021/10/23 11:34

Naoon5031

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

IPC通信の書き方が変わっているため、動かないのかと…

https://dotinstall.com/lessons/basic_electron/36214
のURLでぐぐったところバージョンは下記とでてインストールしているバージョンと比べて
かなり古いバージョンのようです

まとめ. このレッスンで解説されている処理の概要は以下のとおりです。 ipc通信の設定; 動作確認. このレッスンではNode.js v4.2.6 / Electron v0.36.7 を使用しています。 質問と回答 (0). この動画に関する、質問と回答はありません。

なので、該当バージョンに変更するか、
新しい方法に書き換えるかですね

これ有料会員じゃないとバージョン出ないんですね
他に視聴したい講座があるならいいんですが、このためだけに払ったりするひといるかもなのでかなり不親切ですよね

追記

こちらの環境だと、記載のエラーは再現しなかったのですが、使っているバージョンはそもそも記載の方法は対応しているんですかね?
(一部console.logで書き換えたので、完全な再現ではないのですが)
https://www.electronjs.org/docs/tutorial/context-isolation/history

electron -v v12.0.0

あと、手元でやったかぎりはcolorがおかしいきが…

javascript

1ipcMain.on('settings_changed', (event, ...args)=> { 2 mainWindow.webContents.send('set_bgcolor', color); 3});

投稿2021/06/04 13:09

編集2021/06/05 08:16
bbn16586

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bishopfunc

2021/06/04 23:17

ご回答ありがとうございます! 最新の書き方について調べ試してみたのですが、違うエラーが出ました... もし差し支えなければご確認いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問