preload
This commit is contained in:
parent
ee3ee77e31
commit
4b82de5374
@ -43,105 +43,117 @@ let mainWindow = null;
|
|||||||
async function createWindow() {
|
async function createWindow() {
|
||||||
console.log('开始创建应用窗口...');
|
console.log('开始创建应用窗口...');
|
||||||
|
|
||||||
// 创建浏览器窗口
|
try {
|
||||||
mainWindow = new BrowserWindow({
|
// 创建浏览器窗口
|
||||||
width: 800,
|
mainWindow = new BrowserWindow({
|
||||||
height: 600,
|
width: 800,
|
||||||
// 确保在Windows 7上能正常显示
|
height: 600,
|
||||||
show: false,
|
show: false,
|
||||||
webPreferences: {
|
// 在Windows 7上使用更兼容的配置
|
||||||
// 使用Node.js 12兼容的路径解析方式
|
webPreferences: {
|
||||||
preload: path.join(__dirname, '../src/preload.js'),
|
// 使用绝对路径确保preload.js能被找到
|
||||||
nodeIntegration: false,
|
preload: path.resolve(__dirname, '../src/preload.js'),
|
||||||
contextIsolation: true,
|
nodeIntegration: false,
|
||||||
}
|
contextIsolation: true,
|
||||||
});
|
// 为Windows 7添加额外的兼容性配置
|
||||||
|
enableRemoteModule: false,
|
||||||
|
sandbox: false,
|
||||||
|
webSecurity: false
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// 设置隐藏菜单栏
|
console.log('Preload path:', path.resolve(__dirname, '../src/preload.js'));
|
||||||
mainWindow.setMenu(null);
|
|
||||||
|
|
||||||
// 添加窗口准备好显示时的事件
|
// 设置隐藏菜单栏
|
||||||
mainWindow.once('ready-to-show', () => {
|
mainWindow.setMenu(null);
|
||||||
console.log('窗口准备就绪,开始显示...');
|
|
||||||
try {
|
// 添加窗口准备好显示时的事件
|
||||||
// 在Windows 7上使用try-catch确保最大化操作不失败
|
mainWindow.once('ready-to-show', () => {
|
||||||
|
console.log('窗口准备就绪,开始显示...');
|
||||||
try {
|
try {
|
||||||
mainWindow.maximize();
|
// 在Windows 7上使用try-catch确保最大化操作不失败
|
||||||
console.log('窗口已最大化');
|
try {
|
||||||
} catch (e) {
|
mainWindow.maximize();
|
||||||
console.error('窗口最大化失败:', e);
|
console.log('窗口已最大化');
|
||||||
|
} catch (e) {
|
||||||
|
console.error('窗口最大化失败:', e);
|
||||||
|
}
|
||||||
|
// 显示窗口
|
||||||
|
mainWindow.show();
|
||||||
|
console.log('窗口已显示');
|
||||||
|
} catch (error) {
|
||||||
|
console.error('显示窗口时出错:', error);
|
||||||
|
// 作为备用方案,再次尝试显示窗口
|
||||||
|
mainWindow.show();
|
||||||
}
|
}
|
||||||
// 显示窗口
|
});
|
||||||
mainWindow.show();
|
|
||||||
console.log('窗口已显示');
|
|
||||||
} catch (error) {
|
|
||||||
console.error('显示窗口时出错:', error);
|
|
||||||
// 作为备用方案,再次尝试显示窗口
|
|
||||||
mainWindow.show();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 添加窗口显示事件
|
// 添加窗口显示事件
|
||||||
mainWindow.on('show', () => {
|
mainWindow.on('show', () => {
|
||||||
console.log('窗口已成功显示');
|
console.log('窗口已成功显示');
|
||||||
});
|
});
|
||||||
|
|
||||||
// 添加webContents加载完成事件
|
// 添加webContents加载完成事件
|
||||||
mainWindow.webContents.on('did-finish-load', () => {
|
mainWindow.webContents.on('did-finish-load', () => {
|
||||||
console.log('页面加载完成');
|
console.log('页面加载完成');
|
||||||
});
|
});
|
||||||
|
|
||||||
// 添加窗口关闭事件监听 - 保持原有逻辑
|
// 添加窗口关闭事件监听 - 保持原有逻辑
|
||||||
mainWindow.on("close", (event) => {
|
mainWindow.on("close", (event) => {
|
||||||
console.log("检测到窗口关闭事件");
|
console.log("检测到窗口关闭事件");
|
||||||
|
|
||||||
// 阻止默认的关闭行为
|
// 阻止默认的关闭行为
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
console.log("已阻止默认关闭行为");
|
console.log("已阻止默认关闭行为");
|
||||||
|
|
||||||
// 使用同步方式显示对话框(Electron 11.5支持的方式)
|
// 使用同步方式显示对话框(Electron 11.5支持的方式)
|
||||||
try {
|
try {
|
||||||
// 直接显示对话框并获取结果
|
// 直接显示对话框并获取结果
|
||||||
const response = dialog.showMessageBoxSync(mainWindow, {
|
const response = dialog.showMessageBoxSync(mainWindow, {
|
||||||
type: "warning",
|
type: "warning",
|
||||||
title: "确认关闭",
|
title: "确认关闭",
|
||||||
message: "确认要退出软件吗?退出后,未完成的考试将不会被保存。",
|
message: "确认要退出软件吗?退出后,未完成的考试将不会被保存。",
|
||||||
buttons: ["取消", "确认关闭"],
|
buttons: ["取消", "确认关闭"],
|
||||||
defaultId: 0,
|
defaultId: 0,
|
||||||
cancelId: 0,
|
cancelId: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log("用户选择了response:", response);
|
console.log("用户选择了response:", response);
|
||||||
|
|
||||||
// 检查用户选择的按钮索引
|
// 检查用户选择的按钮索引
|
||||||
if (response === 1) {
|
if (response === 1) {
|
||||||
console.log("用户确认关闭,准备退出应用");
|
console.log("用户确认关闭,准备退出应用");
|
||||||
// 移除所有事件监听器以防止任何干扰
|
// 移除所有事件监听器以防止任何干扰
|
||||||
mainWindow.removeAllListeners();
|
mainWindow.removeAllListeners();
|
||||||
// 强制关闭窗口
|
// 强制关闭窗口
|
||||||
mainWindow.destroy();
|
mainWindow.destroy();
|
||||||
// 然后退出应用
|
// 然后退出应用
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
console.log("强制退出应用");
|
console.log("强制退出应用");
|
||||||
app.quit();
|
app.quit();
|
||||||
}, 100);
|
}, 100);
|
||||||
} else {
|
} else {
|
||||||
console.log("用户取消关闭");
|
console.log("用户取消关闭");
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error("显示对话框时出错:", error);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
});
|
||||||
console.error("显示对话框时出错:", error);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// 加载应用内容
|
// 加载应用内容
|
||||||
if (process.env.WEBPACK_DEV_SERVER_URL) {
|
if (process.env.WEBPACK_DEV_SERVER_URL) {
|
||||||
// 开发模式加载开发服务器URL
|
// 开发模式加载开发服务器URL
|
||||||
await mainWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
|
await mainWindow.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
|
||||||
if (!process.env.IS_TEST) mainWindow.webContents.openDevTools();
|
if (!process.env.IS_TEST) mainWindow.webContents.openDevTools();
|
||||||
} else {
|
} else {
|
||||||
createProtocol("app");
|
createProtocol("app");
|
||||||
// 生产模式加载本地HTML文件
|
// 生产模式加载本地HTML文件
|
||||||
mainWindow.loadURL("app://./index.html");
|
mainWindow.loadURL("app://./index.html");
|
||||||
|
}
|
||||||
|
} catch (windowError) {
|
||||||
|
console.error('创建窗口失败:', windowError);
|
||||||
|
// 显示错误对话框
|
||||||
|
dialog.showErrorBox('创建窗口失败', `无法创建应用窗口: ${windowError.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,40 +12,7 @@ module.exports = {
|
|||||||
|
|
||||||
pluginOptions: {
|
pluginOptions: {
|
||||||
electronBuilder: {
|
electronBuilder: {
|
||||||
// 基础配置
|
mainProcessFile: 'background/main.js',
|
||||||
nodeIntegration: false,
|
|
||||||
contextIsolation: true,
|
|
||||||
preload: "src/preload.js",
|
|
||||||
mainProcessFile: "background/main.js",
|
|
||||||
lintPreloadFiles: false,
|
|
||||||
externals: ["fontkit", "pdfkit"],
|
|
||||||
|
|
||||||
// 主进程webpack配置
|
|
||||||
chainWebpackMainProcess: (config) => {
|
|
||||||
config.module
|
|
||||||
.rule("babel")
|
|
||||||
.test(/\.js$/)
|
|
||||||
.use("babel-loader")
|
|
||||||
.loader("babel-loader")
|
|
||||||
.options({
|
|
||||||
presets: ["@babel/preset-env"],
|
|
||||||
plugins: [
|
|
||||||
"@babel/plugin-proposal-optional-chaining",
|
|
||||||
"@babel/plugin-proposal-class-properties",
|
|
||||||
],
|
|
||||||
})
|
|
||||||
.end();
|
|
||||||
|
|
||||||
// 添加对mjs文件的处理 - 兼容Electron 11
|
|
||||||
config.module
|
|
||||||
.rule("mjs")
|
|
||||||
.test(/\.mjs$/)
|
|
||||||
.include.add(/node_modules/)
|
|
||||||
.end()
|
|
||||||
.type("javascript/auto");
|
|
||||||
},
|
|
||||||
|
|
||||||
// 所有构建选项都放在这里
|
|
||||||
builderOptions: {
|
builderOptions: {
|
||||||
// 应用基本信息
|
// 应用基本信息
|
||||||
appId: 'com.example.exam11',
|
appId: 'com.example.exam11',
|
||||||
|
Loading…
Reference in New Issue
Block a user