怎么把网站黑掉在线考试类网站怎么做

当前位置: 首页 > news >正文

怎么把网站黑掉,在线考试类网站怎么做,wordpress向微信群发送内容,自定义颜色 网站预加载#xff08;preload#xff09;脚本只能访问部分 Node.js API#xff0c;但是主进程可以访问全部API。此时#xff0c;需要使用进程通信。 比如#xff0c;在preload.js中#xff0c;不能访问dirname#xff0c;不能使用 Node 中的 fs 模块#xff0c;但主进程…预加载preload脚本只能访问部分 Node.js API但是主进程可以访问全部API。此时需要使用进程通信。 比如在preload.js中不能访问dirname不能使用 Node 中的 fs 模块但主进程main.js 是可以的这时候就需要使用进程通信。也就是说要让 preload.js 通知 main.js去调用 Node.js API 实现功能。 Electron 进程通信 IPC全称是 InterProcess Communication 即进程间通信。IPC连接不同进程在 Electron 应用中主进程和渲染进程各自有不同的职责和运行环境。IPC是它们之间进行交互和协同工作的关键机制。没有有效的 IPC主进程和渲染进程将无法有效地沟通和协调导致应用功能受限。调用原生 API 的唯一途径IPC 是 Electron 中最为核心的内容。IPC 是从 UI通常在渲染进程中调用原生 API 的唯一方法。这意味着如果想要在 Electron 应用中实现诸如文件系统操作、与操作系统交互等功能必须通过 IPC 让主进程执行这些操作然后将结果返回给渲染进程进行展示或进一步处理。Electron 提供了 ipcMain 和 ipcRenderer 模块用于主进程和渲染进程之间的通信。 ipcMain主进程中使用从主进程到渲染进程的异步通信。 发送消息时事件名称为channel 即 通信通道。回复同步信息时需要设置event.returnValue。可以使用event.reply(…)将异步消息发送回发送者。 ipcRenderer渲染进程中使用从渲染器进程到主进程的异步通信。
模式1渲染器进程到主进程单向 概述要将单向 IPC 消息从渲染器进程发送到主进程需要在渲染器进程中 ipcRenderer.send 发送消息在主进程中使⽤ ipcMain.on 接收消息。 常用于从 Web 内容调用主进程 API。 ipcRenderer.send(channel,…args) 用于从渲染进程向主进程发送消息。channel字符串表示消息的通道名称。主进程可以通过监听这个特定的通道名称来接收来自渲染进程的消息。例如可以定义一个名为 custom-action 的通道。…args这是一个可变参数可以传递任意数量的参数。这些参数可以是任何有效的 JavaScript 值如字符串、数字、对象等。用于单向通信的 ipcRenderer.send API 也可用于双向通信。在 Electron 7 之前官方推荐使用 ipcRenderer.send 进行异步双向通信。在 Electron 7 中官方添加 ipcRenderer.invoke API用于处理渲染器进程中双向 IPC。 ipcMain.on(channel, listener) 在主进程中监听来自渲染进程的特定通道消息。hannel这是一个字符串表示特定的通信通道名称。渲染进程使用相同的通道名称通过 ipcRenderer.send 或 ipcRenderer.invoke 向主进程发送消息。listener这是一个回调函数当主进程接收到来自渲染进程通过指定通道发送的消息时这个回调函数会被执行。 回调函数通常接受两个参数event 和 args。event 代表事件对象可用于回复渲染进程等操作args 是渲染进程发送的参数可以是单个值或一组值具体取决于渲染进程的发送方式。
示例 实现需求点击按钮后在⽤户的 D 盘创建⼀个 hello.txt ⽂件⽂件内容来⾃于⽤户输⼊。 在页面中添加相关元素 !DOCTYPE html html langenheadmeta charsetUTF-8 /metahttp-equivContent-Security-Policycontentdefault-src self; style-src self unsafe-inline; img-src self data:;/titleElectron/titlelink relstylesheet href./index.css/headbodyinput idcontent typetextbrbrbutton idbtn在⽤户的D盘创建⼀个hello.txt/button/bodyscript src./render.js/script /html在 preload.js 中使⽤ ipcRenderer.send(信道, 参数) 发送消息与主进程通信。 // contextBridge在隔离的上下文中创建一个安全的、双向的、同步的桥梁。 // ipcRenderer是渲染进程中用于与主进程进行通信的模块。 const {contextBridge, ipcRenderer} require(electron)// 把方法/数据暴露给渲染进程 contextBridge.exposeInMainWorld(customAPI, {saveFile: data {// 渲染进程给主进程发送⼀个消息ipcRenderer.send(save-file, data)} })在render.js中调用 preload.js 暴露的 saveFile 方法通知主进程 const btn document.getElementById(btn); const content document.getElementById(content); btn.addEventListener(click, () {// 在render.js 调用 preload.js 暴露出来的saveFile方法通知主进程customAPI.saveFile(content.value); });主进程中在加载页面之前使用 ipcMain.on(信道, 回调) 配置对应回调函数接收 消息。 const { app, BrowserWindow, ipcMain } require(electron); const path require(path) const fs require(fs) // 保存文件 function saveFile(event,data) {console.log(event, data)fs.writeFileSync(D:/hello.txt,data)// 通过 response-save-file 通道将结果回复给渲染进程。event.reply(response-save-file, 保存文件啦); }function createWindow() {const win new BrowserWindow({width: 1000, // 窗口宽度height: 800, // 窗口高度webPreferences: {// 此处只能使用绝对路径preload: path.join(dirname, preload.js)}});// 主进程注册对应回调ipcMain.on(save-file,saveFile)// 在窗口中加载一个远程页面win.loadFile(./pages/index.html); }渲染进程与主进程通信的流程 渲染进程触发 当渲染进程中的某个事件发生时比如用户点击按钮或页面加载完成可以调用 ipcRenderer.send(信道, 参数) 方法向主进程发送消息。 主进程接收和处理 主进程使用 ipcMain.on(信道, 回调) 方法监听特定的通道名称。当主进程接收到来自渲染进程的消息时它可以根据通道名称和传递的参数执行相应的操作。 渲染进程接收回复 渲染进程可以使用 ipcRenderer.on 方法监听主进程的回复通道。当渲染进程接收到主进程的回复时可以根据结果进行界面更新或其他处理。
模式2渲染器进程到主进程双向 概述渲染进程通过 ipcRenderer.invoke 发送消息主进程使⽤ ipcMain.handle 接收并处理消 息。 常用于从渲染器进程代码调用主进程模块并等待结果 。 ipcRenderer.invoke(channel, …args) channel这是一个字符串表示消息的通道名称。与ipcRenderer.send类似主进程通过监听这个特定的通道名称来接收来自渲染进程的请求。…args这是一个可变参数可以传递任意数量的参数给主进程。这些参数可以是任何有效的 JavaScript 值用于向主进程提供请求所需的信息。ipcRender.invoke 的返回值是 Promise 实例。 ipcMain.handle(channel, listener) channel一个字符串代表特定的通信通道名称。listener一个回调函数当主进程接收到来自渲染进程通过指定通道发送的同步请求时这个回调函数会被执行。 回调函数通常接受两个参数event 和 args。event 代表事件对象可用于回复渲染进程等操作args 是渲染进程发送的参数可以是单个值或一组值具体取决于渲染进程的发送方式。回调函数需要返回一个值这个值将作为响应发送回渲染进程。
示例 实现需求点击按钮从 D 盘读取 hello.txt 中的内容并将结果呈现在页面上。 在页面中添加相关元素 div idcontent/div button idbtn读取⽤户D盘的hello.txt/button在 preload.js 中使⽤ ipcRenderer.invoke(信道, 参数) 发送消息与主进程通信。 // contextBridge在隔离的上下文中创建一个安全的、双向的、同步的桥梁。 // ipcRenderer是渲染进程中用于与主进程进行通信的模块。 const {contextBridge, ipcRenderer} require(electron)// 把方法/数据暴露给渲染进程 contextBridge.exposeInMainWorld(customAPI, {readFile: () {// invoke 的返回值永远是Promisereturn ipcRenderer.invoke(read-file)} })在render.js中调用 preload.js 暴露的 saveFile 方法通知主进程 const btn document.getElementById(btn); const content document.getElementById(content); btn.addEventListener(click, async () {let txt await customAPI.readFile();content.innerHTML txt }); 主进程中在加载页面之前使用 ipcMain.handle(信道, 回调) 配置对应回调函数接收 消息。 const { app, BrowserWindow, ipcMain } require(electron); const path require(path) const fs require(fs) // 保存文件 function readFile(event,data) {return fs.readFileSync(D:/hello.txt).toString() }function createWindow() {const win new BrowserWindow({width: 1000, // 窗口宽度height: 800, // 窗口高度autoHideMenuBar: true, // 隐藏菜单栏webPreferences: {// 此处只能使用绝对路径preload: path.join(
dirname, preload.js)}});// 主进程注册对应回调ipcMain.handle(read-file, readFile)// 在窗口中加载一个远程页面win.loadFile(./pages/index.html); }ipcRenderer.invoke(channel, …args) 与 ipcRenderer.send(channel, …args) 用于双向IPC的区别 ipcRenderer.send需要设置第二个 ipcRenderer.on 监听器来处理渲染器进程中的响应。 使用 ipcRenderer.invoke直接获得作为 Promise 返回到原始 API 调用的响应值。没有显而易见的方法可以将 ipcRenderer.on(asynchronous-reply, (_event, arg) {}) 消息与原始的 ipcRenderer.send(asynchronous-message) 消息配对。 如果不写备注开发者可能也不知道asynchronous-reply是asynchronous-message 通道的回复结果。如果通过这些通道非常频繁地来回传递消息则需要添加其他应用代码来单独跟踪每个调用和响应。 模式3主进程到渲染器进程 概述主进程使用 win.webContents.send 发送消息渲染进程使⽤ ipcRenderer.on 接收并处理消 息。 常用于从主进程主动发送消息到渲染器进程。 示例 需求应⽤加载 6 秒钟后主动给渲染进程发送⼀个消息 主进程中使⽤ win.webContents.send(信道, 数据) 发送消息。 const { app, BrowserWindow, ipcMain } require(electron); const path require(path); function createWindow() {const win new BrowserWindow({width: 1000, // 窗口宽度height: 800, // 窗口高度autoHideMenuBar: true, // 隐藏菜单栏webPreferences: {// 此处只能使用绝对路径preload: path.join(__dirname, preload.js)}});// 在窗口中加载一个远程页面win.loadFile(./pages/index.html);// 创建⼀个定时器setTimeout(() {win.webContents.send(message, hello!);}, 6000); }preload.js 中使⽤ ipcRenderer.on (信道, 回调) 接收消息并配置回调函数。 window.onload () {customAPI.getMessage(logMessage); }; function logMessage(event, str) {console.log(event, str); }