预加载脚本 (是在渲染进程加载页面之前运行的脚本)
      在渲染进程和主进程之间提供一个安全的桥梁,
      使得主进程和渲染进程能够安全的通信
main.js
import { app, BrowserWindow } from "electron"
import url from 'url'
import path from 'path'
import os from 'os'
let __filename = url.fileURLToPath(import.meta.url)
let __dirname = path.dirname(__filename)
//console.log(os.version()) //内核版本
//console.log("邓瑞编程")
//创建窗口
const createWindow = () => {
    const mainWindow = new BrowserWindow({
        width: 1300, //设置窗口宽度(单位:像素)
        height: 750, //设置窗口高度
        icon: "resource/images/code.ico", //设置窗口图标
        autoHideMenuBar:true, //隐藏菜单栏
        //resizable: false, //禁止调整窗口大小
        //x:0, //x表示窗口左上角的水平坐标(单位:像素)
        //y:0, //y表示窗口左上角的垂直坐标
        webPreferences: { //网页偏好设置
            nodeIntegration: true, //允许在渲染进程中直接使用 Node.js API
            contextIsolation: true, //启用上下文隔 (提高安全性)
            preload: path.resolve(__dirname,"resource/preload/preload.mjs"), //预加载脚本
        }
    })
    //mainWindow.loadURL("https://www.dengruicode.com") //加载指定的 url
    mainWindow.loadFile("resource/renderer/views/index.html") //加载本地 html
    //当尝试打开新窗口时, 阻止默认行为, 在当前窗口加载 url
    mainWindow.webContents.setWindowOpenHandler(details =>{
        mainWindow.loadURL(details.url)
        return { action: 'deny' } //阻止默认行为
    })
}
//当应用准备就绪后创建窗口
app.whenReady().then(() => {
    createWindow()
})
注
      nodeIntegration: true, contextIsolation: true:
      适用场景:
            需要在预加载脚本中使用 Node.js API
      注意:
            可提高一定的安全性,因为Node.js的全局对象(global)与渲染器进程的全局对象(window)相互隔离
preload.mjs
      import os from 'os'
      import { contextBridge } from "electron"
      console.log("preload.mjs")
      contextBridge.exposeInMainWorld('DRAPI',{
          url:"dengruicode.com",
          version:os.version()
      })
注
      contextBridge.exposeInMainWorld
            用于在 contextIsolation: true 的环境下将指定的对象或函数暴露到渲染进程中
index.js
      console.log("index.js", window)
                        5.预加载脚本
                    
                    
                        -- 未经授权禁止转载 --