gpt4 book ai didi

javascript - Electron:有没有办法通过 ipc 访问/修改主进程数组

转载 作者:行者123 更新时间:2023-12-03 01:51:51 27 4
gpt4 key购买 nike

一般来说,通过 electro ipc 传递的数组会被复制。

// main process
global['test'] = []
// renderer process
console.log(remote.getGlobal('test')) // []
remote.getGlobal('test').push('1')
console.log(remote.getGlobal('test')) // expected: ['1'], actual: []

但是修改对象会很好用。

// main process
global['test'] = {a: 1}
// renderer process
console.log(remote.getGlobal('test')) // {}
remote.getGlobal('test').a += 1
console.log(remote.getGlobal('test')) // expected/actual: {a: 2}

为了能够在渲染器进程上直接从主进程修改数组,我尝试传递一个在主进程中 package 数组的代理:

// Main Process Code
const real = []
global['proxy'] = new Proxy({}, {
get: (_, property) => Reflect.get(real, property),
set: (_, property, value, receiver) => Reflect.set(real, property, value, receiver),
deleteProperty: (_, property) => Reflect.deleteProperty(real, property),
enumerate: (_) => Array.from(Reflect.enumerate(real)),
ownKeys: (_) => Reflect.ownKeys(real),
has: (_, property) => Reflect.has(real, property),
defineProperty: (_, property, descriptor) => Reflect.defineProperty(real, property, descriptor),
getOwnPropertyDescriptor: (target, property) => {
let descriptor = Object.getOwnPropertyDescriptor(real, property)
if (descriptor) {
descriptor.value = real[property]
Reflect.defineProperty(target, property, descriptor)
}
return descriptor
}
})

// Renderer Process Code
const proxy = remote.getGlobal('proxy')

proxy.push(1) // error thrown: Uncaught TypeError: proxy.push is not a function
console.log(proxy.join(','))

正如代码注释中所表达的,似乎是代理传值有问题。既然如此,还有没有其他有效且实用的方法来达到我的目的呢?

最佳答案

这应该有效。第一个主进程:

//global array
global.test = {
myarr: [3]
};

//...electron setup: window etc...

setTimeout(function() {
console.log(global.test); //now shows 3 and 6
},5000);

在渲染器中(例如index.html脚本):

var remote = require('electron').remote;

var _old = remote.getGlobal('test').myarr;
_old.push(6);

remote.getGlobal('test').myarr = _old; //update global with altered array

console.log(remote.getGlobal('test').myarr); //now shows 3 and 6

关于javascript - Electron:有没有办法通过 ipc 访问/修改主进程数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50386004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com