【Electron】ハイブリッドアプリ開発総合【Cordova】 [無断転載禁止]©2ch.net
HTML5,CSS3,JavaScriptなどWeb標準技術を活用したアプリ開発についてのスレです。
各種フレームワークの他、webviewの利用、PWA(AMP)、ブラウザ拡張機能など板選びに迷ったらこのスレに書き込んで下さい。
副次的な話題としてビルドツールなど開発環境に関する話も可。
主なフレームワーク
Electron
https://electron.atom.io/
NW.js
https://nwjs.io/
Apache Cordova
https://cordova.apache.org/
PhoneGap
https://phonegap.com/
ReactNative
https://facebook.github.io/react-native/
NativeScript
https://www.nativescript.org/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured Electronについてですが
トラックパッドで画面をクリックするとCSSのhover状態がキャンセルされると気づきました
hoverで変化するようにしている箇所が、クリックすると非hoverの表示になってしまう
マウスカーソルを動かすとまたhover時表示に戻る
という挙動です
このトラックパッドというのはmacbook proのもので、
bootcampでwindows10を使っています
Chromeではこのような挙動はありません。
>>28の挙動とも関連してそうです おそらくクリック時にマウスカーソルがそこにないものと判断されてしまうのではないか
と予想しています
ハード的な問題かと考えましたが、それだとChromeで症状が出ないのがおかしい。
ChromeとElecronの間の微妙な差異の中でバグが生まれてしまっている感じです ためしにmousemoveをconsoleに出力してみましたが、
クリックしてもmousemoveイベントは発生しませんでした
おそらく原因はCSS処理の層にあるのでしょう ビルドしたら現象消えるんじゃね?
と思ったのですが、逆に>>28で消えたと思っていた症状が
ビルドしたらまた出るようになりました・・ >>28の件ですが
マウスアウトが表示に反映されるまで待てばいいのでは?と考えて
setTimeoutを使ってセレクトボックスを閉じるのを後回しにしたところ、解決しました ・CSSはどの定義が優先されてるのか
・各イベントは発火しているのか
・Electronじゃないと起こらないのか
浅い連投する前にデベロッパーツールともっと向き合って electronで
BrowserWindowを上や下や左や右に揃えて表示するにはどうしたらいいのでしょうか?
中央揃えのためにはcenterというオプションがありますが >>35の件ですが
https://github.com/electron/electron/blob/master/docs/api/screen.md
このscreenモジュールを使えばディスプレイのサイズを取得できると分かりましたが
electronの座標系はディスプレイの座標系よりも少し小さいようです
ウインドウを左揃えにするために
ウインドウのxを0にすると、左側に8ピクセルくらいの隙間が空きます
ウインドウを右揃えにするために
ウインドウのxを、画面幅 - ウインドウ幅にすると、同様に右側に8ピクセルくらいの隙間が空きます
またディスプレイの実際のピクセル数は1280×800ですが、
screen.getPrimaryDisplay()で取得できるディスプレイサイズは、1024×640です
この数字の差異は、electron内部で独自の座標系を持っているからのようで、
そのこと自体は別にいいですが、余計なマージンが入るのは困ります
たとえばxを0ではなく-8とかにすれば、左揃えには出来るのですが、
マージンが何に由来するのか分からないので、ハードコーディングするのは抵抗があります
どうなのでしょうか? https://gist.github.com/hisasann/a99b7e4aa5f2c9cfc7eb
electronの座標系のpaddingに言及しているページがありました
ただleftやtopを0、widthやあheightを画面サイズにすればウインドウが全画面になる
と書かれているので、この時点と今では挙動が変わっていそうです
ともかくこの座標系レベルのpaddingは意図的に作られたもののようです Electronではじめるアプリ開発
~JavaScript/HTML/CSSでデスクトップアプリを作ろう
野口 将人・倉見 洋輔、2017
この本では、1280×800(735), scaleFactor: 2 とか
screen.getAllDisplay()[0] を見てみれば? >>38
ありがとうございます
getAllDisplayとgetPrimaryDisplayが返す値は同じでした
ただ、その本とは異なり、scaleFactorは1.25でした
多分、このscaleFactorが、
Electron座標系とディスプレイ座標系の対応関係を決めているのだと思いますが。
その本は、Retinaなどの画素数が多い環境に基づいているのでしょうね <meta name="viewport" content="width=device-width,
initial-scale=1, minimum-scale=1, maximum-scale=1, user-scalable=no">
HTML のviewport の、initial-scale みたいなもん ありがとうございます
ということは、設定可能な項目なのでしょうか
何か色々知識が足りてない気がするので「Electronではじめるアプリ開発」をぽちってみました 漏れも、よくわからない
screen モジュールの機能を見て ElectronではipcMainとipcRendererを使って
レンダラープロセス→メインプロセスへのIPCのsendと
それに応対してのメインプロセス→レンダラープロセスのsendは出来ますが
メインプロセスを起点にしたレンダラープロセスへのIPCは出来ないようです
メインプロセス側のタイミングでレンダラープロセスを呼びたい時はどうすればいいのでしょうか? >>43
BrowserWindowオブジェクトのwebContentsプロパティに対してsendメソッドを発行することで出来ました ElectronがAndroid対応になるのはいつぐらい?
ロードマップはある?
誰がやってる? ウインドウのalwaysOnTopをトグルする処理をしようと思います
レンダラプロセス中のwindowがBrowserWindowオブジェクトなのかと思って
レンダラプロセスの中で
window.setAlwaysOnTop(true);
とやってみたのですが、エラーになりまりした
windowはBrowserWindowオブジェクトではなかったようです
レンダラプロセスの中で自分自身のBrowserWindowオブジェクトにアクセスするにはどうしたらいいのでしょうか? APIドキュメントを見ても、レンダラプロセスから自身の外観を変えることはできないようなので
IPCでメインプロセスを呼ぼうと思ったのですが
メインプロセス側でレンダラプロセスのBrowserWindowオブジェクトを確定するには
どうするのかという問題が出てきました
マルチウインドウのアプリなのでレンダラプロセスが複数あります
メインプロセスが受信するeventのsenderには、webContentsが入っているとドキュメントにあります
このwebContentsは、BrowserWindowのプロパティの一つだそうです
ですがwebContentsには、自身を所有しているBrowserWindowを取得するメソッドがないっぽいです
idプロパティを持っているので、
BrowserWindowオブジェクトのリストをループさせて比較するという方法で見つけることは出来そうですが
こういう方法しかないのでしょうか? >>48
もっといい方法があるのかないのか分かりませんが
idを使って同定するようにしました electronで新しいBrowserWindowを作る時
若干待たされる感があるのが気になっていたのですが
前もって非表示のスペアウインドウを作っておいて必要なタイミングでshowするようにしたら、
気持ちいい動作になりました
これはelectronに限らず複数ウインドウを使うアプリを作る時には定石なのかもしれませんね electronについてです
ipcMain/ipcRendererにはsendSyncがありますが
webContentsにはsendのみでsendSyncがないようです
何故でしょうか? >>47の件ですが
「Electronではじめるアプリ開発」を読んでいたら
remoteモジュールのgetCurrentWindow()を使えば
レンダラプロセスから自身のBrowserWindowオブジェクトを取得出来ると出てきました
remoteモジュールはgetGlobalでメインプロセスのグローバル変数も取得できるという
なかなかすごいモジュールです remoteを使うようにしたら
泥臭いIPCのコードをほとんどなくせますね
remoteを使うためにはIPCを理解することが重要なので、無駄だとは言いませんが・・ >>52の件ですが
メインプロセスの配列をレンダラプロセスからremote.getGlobalして
メインプロセス側でその配列を破壊的に変更すれば
レンダラプロセス側でもその変更が反映するのだろうと思っていたのですが、
どうも反映しないようです
remote.getGlobalで配列は参照渡しできないのでしょうか? electronで、オブジェクトが(remoteで取得した)リモートオブジェクトかどうかを
コード上から調べる方法はあるのでしょうか?
consoleに出力しても普通のオブジェクトと全く同じに見えます https://github.com/electron/electron/blob/v0.35.0/atom%2Frenderer%2Fapi%2Flib%2Fremote.coffee
remoteのソースコードがありました
配列とオブジェクトの処理は異なっていて
オブジェクトの場合、メソッド呼び出しやプロパティの読み書きでIPCが呼び出されるが
配列の場合は値渡しになる、という挙動のようです グローバルショートカットキーの修飾キーとしてWindowsキーを使いたいです
https://github.com/electron/electron/blob/master/docs/api/accelerator.md
ここにWindowsキーはSuperと書くとありますが、
Super+R
みたいに書いても動作しません
Alt+Ctrl+R
のようにSuper以外の書き方ではちゃんと動作しています
なぜでしょうか? 開発フレームワークElectronのエクスプロイトでWebとモバイルの人気アプリが危険
https://jp.techcrunch.com/2018/05/15/2018-05-14-exploit-puts-popular-web-and-mobile-apps-at-risk/
これを見て、バージョンアップしておいた方がいいのだろうと思って、
electronのバージョンアップをして
使ってるパッケージもついでにバージョンアップしました
leveldbのパッケージはネイティブモジュールなので、electron-rebuildでリビルドしようとしたのですが
An unhandled error occurred inside electron-rebuild
Could not detect abi for version 2.0.0 and runtime electron.
Updating "node-abi" might help solve this issue if it is a new release of electron
と言われました
ABIとか言われても、何を言っているのか分かりません
どうしたらいいのでしょうか? >>58の件ですが
検証するためにプレーンなelectronプロジェクトを作ってみて、leveldbをリビルドしたら無問題。
エラーの出るプロジェクトでモジュールの再インストールなどを繰り返しながら原因を探したところ
なんとelectron-rebuildのコマンドヒストリーからいつの間にか引数が一つ消えていたことが原因でした
electronのバージョンアップはまったく関係なかったです
失礼しました 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
2BIZV Electron Fiddle
https://github.com/electron/fiddle
こんなのあった
electronアプリが動かせるプレイグラウンド
なかなか良さそう user32.dllとか winapi呼び出せますか 特定のサイトを便利に使うための専用ブラウザを作ろうとしたけど、セキュリティーの扱いが難しくて断念した >特定のサイトを便利に使うための専用ブラウザ
2ちゃんの専ブラみたいので他サイトの奴?
発想は良さそうな気がするけど
セキュリティで引っかかるのも分かる Android NDKとObjective-C使うと
AndroidとiOSアプリってほぼワンソースでできたりする? Objective-Cはネイティブコードじゃないよな。
iOSに特化したコーディング言語何で無理に100ペリカ。 だれかquasar frameworkという奴を使ってみて Chroniumは、普通のJavaScriptでは使えない「同期wait処理」が行える
ようになっていることも特徴の1つかも知れない。
この機能により、「Modal」なDialogが作れる。
よく知らないが、ライバルのCordovaはそれが出来ないかもしれない。
ここで言ってる「同期wait処理」とは、sleep(1000);とすると、
単純に、1000(ms)待って戻ってこないという普通の言語では昔から
当たり前にあったような機能のこと。
JavaScriptではこのような単純な「待機処理」が出来ないらしく、。
待機したい場合は、大体、以下の2種類の方法しか使えないらいい:
1. 以後の処理を関数に分けて、タイマーイベントのコールバック関数として指定する。
しかしこれだと、for 文の中で sleep したい場合などは、難しい気がする。
2. async, await を使う。しかし、これだと、async 修飾された関数を呼び出した側には
にはすぐに帰ってくるので、ちゃんと wait したことにはならない。 electronを最近始めたんだけど
コレ読んどけ的ないい本ないかしら? >>70
プログラム初心者じゃないんでしょ?
そこらのブログと公式ページのリファレンス見れば事足りるよ。
バージョンアップが早いから書籍だと情報が古いと思う。 >>71
macでやってる人が多いんだけど
macじゃなきゃ安定しないの?
ubuntuでwinのインストーラー作ってみたけど起動しない(´・ω・`) >>72
windowsでいい
electron-packagerとelectron-builderどっち使ってる? electron-builderでやった
おすすめだって聞いたので >>72
Electronを使いたがるMacユーザーが多そうに見える原因として考えられるもの:
1. Macは、東大が、学生に「標準パソコン」として指定してる。
東大の学生は優秀なのでQiitaなどに沢山の技術的な記事が書かれる。
2. Macユーザーにとっては、マルチプラットフォーム開発が重要となる。 東大生はあんな頭悪いqiita書かないよ多分。。。 Windowsはどんなバカでも使えるようにレガシーな機能もずっと保守し続けてる
そのせいで最新の機能が制約されてたり、MACに比べたらいろいろと劣ってる
消費者ならWin、働くためのツールならMacだよ 以前はmacで開発してたけど今はWindowsでやってるわ
VSCode使ってるから大して変わらん テスト用にはどの環境もあったほうがいい
マルチプラットフォームだけど表示や挙動がそれぞれ少しずつ違うこともあるから。
ただWindowsだとnpm install -gでPATHが通らなかったりcross-env使わないと環境変数設定できなかったりするので開発はubuntuやMacの方がやりやすかったりする
んでMac使うことで開発モチベーション上がるならMac使えばいいだけ 5ちゃんねるなんてそんなもんよ
意見あるなら反論訂正すればいいだけ npx コマンドで、node_modules 内のプログラムを、パス無しで実行できる
例、npx gulp npxは知ってるがそれで対処できない例外として
例えばnpmでyarnを入れるチュートリアルを見た初心者が躓く
ネットに書いてるコマンド通りに実行しても、うまくいかない可能性がwindowsの方ではやや大きくなる 親が裕福でない限り、どんなに頭が良くてもWindowsを使うことになるハズ。
食っていかなきゃならないからだよ。 gulp, npm scripts に書くとか
Webデザイナーの仕事を楽にする! gulpではじめるWeb制作ワークフロー入門、中村 勇希、2018/5/29 >>89
・PC/ATの場合、自作機にすれば、物凄く安く付く。買い直さずに好きな部分だけ
変えていけばいいので、特に箱(筐体)はいつまでも同じものが使える。電源も。
・一般人の大部分が Windows使ってるので、一般向けの何かを作って食って
いくためには Windowsでないととても不利になる。 外部からのデータ取得ってmainプロセスrendererプロセスどっちでやるべきなの?
javascript勉強中でとりあえず題材として2ch専ブラ作ってるから板やスレの一覧とかなんだけど
main側のnetモジュールとかにお願いするのかfetchとかでrenderer側で完結させるべきなのか
それぞれの使いどころとかも知りたい 漏れはスクレイピングを、Ruby, Nokogiri, Selenium WebDriver でやってる。
GUI は、HTML, CSS, JavaScript
自動ログインも、やってる コルドバってhttp鯖はリモートでも動くのね
知らんかった >>92
レンダラーの役割はメインから受け取ったデータをもとに描画することだよ
基本的にデータの取得はメイン まじかめんどくさそう
こういうのどういう風に書いたらいいのか
ipcMainとipcRendererでイベント管理すんの?
あと参考になりそうなossプロジェクトあったら教えてくださいな レンダラー側でも取得はできるけど
キャッシュの管理はメインでやる必要があるから
メインでデータ取得してレンダラーに渡すほうが使い分けがはっきりしていいかなと思う
ipcイベント管理がちょっと複雑になるけど
同期通信はipcRenderer.sendSync()で書ける レンダラーでもnodeモジュールは使えるし、どっちでもいいんじゃね?
複数window使うならメインプロセスで制御したほうがいいだろうけど設計次第かと。 どうせLANのサーバーにしかアクセスしないんで全部同期通信でいいですかね? win10って文字汚すぎでしょ、よく目が潰れないなって関心する
それと4Kも増えてるのに対応してないことが多すぎる、ダメダメすぎてMac選んだわ electronの技術を使ってデスクトップのアプリケーションを開発するなら、
ユニークで、かなりの高品質なプログラムでないと全く割に合わない。
https://boostnote.io/
electronベースのBoostnootをダウンロードしてみた。
ダウンロードしたファイルをダブルクリックしたら、インストールに時間がかかる。
C:\Users\各自のユーザ名\AppData\Local\boostのフォルダにインストールされて、
383 MBの容量があった。
ブラウザソフト並みの大容量だ。小物のソフトでも似たようなものだろう。
Boostnootは優秀なプログラムだ。 空っぽのアプリでも100MB超えるのは難点だねえ。
chrome分離モードとかできたらいいのに。 どうせ馬鹿にされるだろうけど、おいらの環境だと、100MBのファイルの
Download に20分〜40分くらいかかることがある。
どうせ金が無いのは、実力がない馬鹿だから、という解釈で自己責任で
終わってしまうんだろうがね。アメリカ人はだから嫌われる。 >>103
使いこなせないのをOSのせいにしてもね。 OS戦争とか禅時代の遺物すぎるだろもっと新しい時代に生きろよ 自分用(+仲間内)の書き捨てソフト作るのに便利だね
これ
配布にはデカすぎるが UNITYはjavascriptが使えなくなって悲しい。
JSにも高性能なゲーム開発環境ソフトがあればいいのに。
あと、Electronはメジャーになりますでしょうか? javascript専用のゲームエンジンを作ってくれ。
UNREAL.jsってなんやねん。 ポテンシャルの高さは VSCodeやDiscordで証明してるし多くの場面で実用化されてるので
人気無いってことはない あんまり個人開発向きじゃないからスレが伸びてないだけだ >>117
日本でのnode.jsのメジャー度合いでしょ。
海外じゃNode.jsもPythonも人気だが、日本は遅れてるからね adobe phonegap desktopでを起動すると
プロジェクト一覧がずっとクルクル読み込みしてて終わらないんだけど対策知ってる人いますか?
再インストールでも直らない... >>124
C++98 と Standard C は最低限使える C++ の独自拡張言語です。
WasmやJavaのJNIが、C++ソースから簡単に記述できる他、言語自体にも、
さまざまな拡張が施されており、リンクリストなどもC++より簡単に使用できます。
アイデアの流出を防ぐため、詳細は明かせません。 >>126
5ch以外で他に活動などはされていないですか?