电子显示时显示白色屏幕

时间:2018-06-19 10:01:58

标签: javascript json electron electron-builder electron-packager

我正在学习电子,我制作了一个阅读和创建文件的电子应用程序。 当我用“npm start”或“electron”启动应用程序时。它按预期工作 you can see the application here

但是当我使用“npm run build”或“build -w”命令时,构建的应用程序只显示白屏我的代码是否有问题或我使用的命令有问题?

这是我的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 = " ";
    })
}

6 个答案:

答案 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中的BrowserRouterHashRouter移到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)

注意:要启动带电子功能的应用,请按以下步骤操作:(请原谅 我是母语为英语的英语人)

  1. 首先忘记电子文件夹,不要触摸它。
  2. 在您的react / ion [在此处输入图像描述] [1] ic目录(该目录是应用程序的根目录)中,在package.json文件中添加以下内容:“ homepage”:“ ./” < / p>

  3. 现在从您的react / ionic目录(该目录是应用程序的根目录)中,导航到“ public”目录并更新您的index.html文件,替换为:

  4. 现在运行以下命令,就是这样... 一种。 ionic build && npx封顶副本 b。 npx盖帽开放电子enter code here