我正在学习电子,我制作了一个阅读和创建文件的电子应用程序。 当我用“npm start”或“electron”启动应用程序时。它按预期工作
这是我的package.json
{
"name": "prova",
"version": "1.1.3",
"description": "Prova electron",
"main": "index.js",
"scripts": {
"start": "electron .",
"dist" : "build"
},
"author": "Randy",
"license": "ISC",
"devDependencies": {
"electron": "^2.0.2",
"electron-packager": "^12.1.0"
},
"build": {
"appId": "prova",
"win":{
"target" : "nsis",
"icon" : "icon.ico"
}
}
}
这是我的主要js页面:
const {app, BrowserWindow} = require('electron')
const url = require('url')
function boot(){
win = new BrowserWindow()
win.loadURL(url.format({
pathname: 'index.html',
slashes: true
}))
}
app.on('ready', boot);
并且我的函数是js页面:
var app = require("electron").remote;
var dialog = app.dialog;
var fs = require("fs");
var i = 0;
var stringaLetta = "";
document.getElementById("bottone").onclick = function(){
dialog.showSaveDialog((fileName) => {
if(fileName === undefined){
alert("errore")
return
}
var content = document.getElementById("testo").value;
fs.writeFile(fileName, content, (err) => {
if (err == undefined) {
dialog.showMessageBox({
message: "the file has been saved",
buttons: ["OK"]
});
}
else dialog.showMessageBox({
message: err
})
})
})
}
document.getElementById("bottone2").onclick = function(){
dialog.showOpenDialog((fileNames) => {
if(fileNames === undefined){
dialog.showMessageBox({
message: "errore durante l'apertura",
buttons: ["OK"]
})
return
} else{
readFile(fileNames[0]);
}
})
}
function readFile(fP){
fs.readFile(fP, 'utf-8', (err, data) => {
if(err){
alert(err)
return
}
var textArea = document.getElementById("rtesto")
textArea.innerHTML = "";
i = 0;
do{
if(data.charAt(i) == "\n"){
stringaLetta += "<br\>";
}else{
stringaLetta += data.charAt(i);
}
i++;
}while(data.charAt(i) != "")
textArea.innerHTML = stringaLetta;
stringaLetta = " ";
})
}
答案 0 :(得分:2)
当我尝试为Windows构建时,我遇到了类似的问题。
尽管win.loadURL(...)
在开发中的工作方式与此类似,但是也许在构建时尝试将其更改为以下形式:
win.loadURL(url.format({
pathname: path.join(__dirname, 'index.html'),
protocol: 'file:',
slashes: true
}));
这可以确保明确正确地获取您的index.html
文件的路径。
要使path.join(...)
工作,您首先需要require
:
const path = require('path');
答案 1 :(得分:2)
就我而言,该版本也显示了一个白色站点。对于那些在项目中使用React Router的人来说,此解决方案可能会有所帮助。
我的startUrl变量如下所示:
const startUrl = process.env.ELECTRON_START_URL || url.format(
{
pathname: path.join(__dirname, '/../build/index.html'),
protocol: 'file:',
slashes: true
});
对我来说,解决方案是将in this thread中的BrowserRouter
从HashRouter
移到App.js
render()
{
return (
<Provider store = { store }>
<HashRouter>
<Switch>
<Route exact path='/' component={Home} />
<Route exact path='/Login' component={Login} />
</Switch>
</HashRouter>
</Provider>
);
}
答案 2 :(得分:1)
我最近遇到的白色屏幕问题在我的情况下有点不同
我在路由器上使用了vue框架(路由器必须为哈希)
1.for vue.js带有电子中的vue路由器
const router = new VueRouter({
mode: 'hash',
routes: [...]
})
2.for带有电子中的反应路由器的react.js
hashrouter
代替
BrowserRouter
没有任何框架
检查入口网址是否正确放置
win.loadURL('app://./index.html')
答案 3 :(得分:0)
我对构建过程一无所知,我在开发中也遇到了同样的问题,电子显示只有一个空白屏幕(可能是因为我点击了一个之前不可用的链接)。
重建后屏幕上什么都没有显示。
对我有用的最后一个黑客是 从系统中清除我的 Appdata。
就我而言,我使用的是 linux,我通过转到 ~/.config/myApp
视窗:C:\Users\<user>\AppData\Roaming\<yourAppName>\Cache
OSX:/Users/<user>/Library/Application Support/<yourAppName>/Cache
希望能帮到有需要的人。
答案 4 :(得分:0)
也许你使用了一个使用 2 个案例的代码模板, 一种用于开发模式,一种用于生产。至少这是我的问题,所以对于开发模式我曾经使用本地主机的 URL,而在生产中,它指向构建目录:像这样:
const prodPath = format({
pathname: resolve('renderer/out/start/index.html'),
protocol: 'file:',
slashes: true
})
答案 5 :(得分:-1)
注意:要启动带电子功能的应用,请按以下步骤操作:(请原谅 我是母语为英语的英语人)
在您的react / ion [在此处输入图像描述] [1] ic目录(该目录是应用程序的根目录)中,在package.json文件中添加以下内容:“ homepage”:“ ./” < / p>
现在从您的react / ionic目录(该目录是应用程序的根目录)中,导航到“ public”目录并更新您的index.html文件,替换为:
现在运行以下命令,就是这样...
一种。 ionic build && npx封顶副本
b。 npx盖帽开放电子enter code here