【问题标题】:Electron close button not working电子关闭按钮不起作用
【发布时间】:2017-02-06 14:38:00
【问题描述】:

我正在尝试使用 Electron(以前的 Atom Shell)创建应用程序。该应用程序包装了一个 AngularJS 应用程序并与在 nodejs 中创建的端点交互以编辑和保存 HTML 内容。我能够毫无问题地创建应用程序。

当我尝试从电子访问“/saveContent”时,关闭按钮(右上角的 Windows 关闭)变得无响应,但是最小化和最大化可以正常工作而没有问题。如果我通过电子访问任何其他端点,则不会出现此问题。我已经尝试过同步文件写入和其他方式。所以我认为 main.js 中的“/saveContent”是问题的原因。

如果我在“Windows 任务管理器”中结束 node.exe,这将关闭整个应用程序。

我下面有主流程代码

'use strict';
var fs = require("fs");
const util = require('util')

var cheerio = require("cheerio");

var express = require('express');
var exapp = express();

var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({extended: false});
exapp.use(bodyParser.json());

const electron = require('electron');
const app = electron.app;  // Module to control application life.
const BrowserWindow = electron.BrowserWindow;  // Module to create native browser window.
const path = require('path')
const url = require('url')
var mainWindow = null;



app.on('ready', function() {
  mainWindow = new BrowserWindow({width: 1280, height: 900, title: "2018JL", "nodeIntegration":false});
  //mainWindow.loadURL(__dirname + '/app/index.html');
  mainWindow.loadURL('http://localhost:5001/');

  mainWindow.on('closed', function() {
    mainWindow = null;
  });
});

app.on('window-all-closed', function() {
    if (process.platform != 'darwin') {
        app.quit();
    }
});


exapp.get('/editPage', function(req,res){
    if(req){
    //console.log("req.query.editURL  "+ req.query.editURL);
        var url = req.query.editURL;
        var editURL = path.join(__dirname + '/app/views'+ url+".html");

        fs.exists(editURL, function(fileok){
            if(fileok){
            fs.readFile(editURL, 'utf8', function (err, data) {
               if (err) {
                    console.log("error.... "+ err);
                    return console.error(err);
               }
               //console.log("data "+ editURL);
               res.send(JSON.stringify({path:editURL, content:data}));
            });
            }else{
                console.log("file not found");
            }
        });
    }
});

exapp.post('/saveContent', function (req, res) {
    //console.log(util.inspect(req, false, null))
    if (req) {
        //console.log(req.query.url + " ------  " + req.query.content);

        var $ = cheerio.load(req.query.content);
        var htmlContent = $('body').children();

        console.log('htmlContent  '+htmlContent);

        fs.writeFile(req.query.url, htmlContent,  function(err) {
           if (err) {
               res.send("Error");
           }
           console.log("End of write file");
           res.send("success");
        });
    }
    console.log("End of function .....");
});

exapp.get('/test', function (req, res) {
    res.send("Test success ");
});


exapp.use(express.static(__dirname + '/app'));
exapp.listen(process.env.PORT || 5001);

下面的客户端代码

$scope.editPage = function () {
            $http({method: "GET",
                url: "/editPage",
                params: {editURL: $location.path()}
            }).then(function success(response) {
                //var result = JSON.parse(response.data);
                //console.log("HTTP Success "+response.data.path);
                $scope.showEditor = true;
                $scope.editURL = response.data.path;
                tinymce.get('contentEditor').setContent(response.data.content);
            }, function error(response) {
                console.log("HTTP Error " + response.statusText);
            });
        };

在“/saveContent”中注释文件写入代码不会导致电子关闭按钮无响应。

【问题讨论】:

    标签: node.js electron


    【解决方案1】:

    我将 mainWindow 的代码替换为如下所示,并且工作正常

        mainWindow.on('close', function(e) { 
            e.preventDefault();
            mainWindow.destroy();
        });
    

    https://github.com/electron/electron/blob/master/docs/api/browser-window.md#windestroy

    【讨论】:

    • 我遇到了类似的问题,即“X”图标没有关闭(或 app.quit())。但是,我的是在导航到某个页面之后(使用 Angular)。这似乎为我解决了这个问题。访问此页面后,我的热重载仍然无法正常工作。
    猜你喜欢
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多