dam*_*ien 6 javascript electron
我有一个可以打开不同窗口的电子应用程序.
在应用程序启动时,应用程序打开一组窗口(加载相同的HTML和JS文件),但使用params更改每个窗口显示的信息.
示例:
app.on('ready', async () => {
...
// open window for stuff 1
win1 = new BrowserWindow({
width: 1024,
height: 728
});
win1.loadURL(`file://${__dirname}/app/app.html?id=1`);
// open window for stuff 2
win2 = new BrowserWindow({
width: 1024,
height: 728
});
win2.loadURL(`file://${__dirname}/app/app.html?id=2`);
Run Code Online (Sandbox Code Playgroud)
显然在file:// path中传递params不起作用.我无法在Electron文档或Internet上的其他地方找到明确的解决方案来将我渲染的窗口调整为参数.
我可以在窗口准备好之后使用IPC通信,但它似乎有点太复杂,直到我只想将变量传递给我的子视图.
PS:说实话,我的应用程序是使用React/Redux构建的,我想传递给view的param是用于监听此视图的redux存储键.
Cir*_*les 14
将查询字符串与win.loadFile(),一起使用
// main process or renderer process 1
data = {"age": 12, "healthy": true}
let win = new BrowserWindow({
webPreferences: {
nodeIntegration: true
}
});
win.loadFile("public/print.html", {query: {"data": JSON.stringify(data)}});
Run Code Online (Sandbox Code Playgroud)
// renderer process 2
const querystring = require('querystring');
let query = querystring.parse(global.location.search);
let data = JSON.parse(query['?data'])
Run Code Online (Sandbox Code Playgroud)
dam*_*ien 12
根据原子源代码,查询字符串方法是一种非常简单的可靠方法,特别是当我们只需要传递一个唯一的字符串参数时:
// main process
win1.loadURL(`file://${__dirname}/app/app.html?id=${id}`);
// rendered process
console.log(global.location.search);
Run Code Online (Sandbox Code Playgroud)
https://github.com/electron/electron/issues/6504
小智 10
几种方法:
其他人发布的查询字符串方法似乎工作正常。这甚至可能是最简单的。
Electron的文档说additionalArguments:
对于将少量数据向下传递到渲染器过程预加载脚本很有用。
主要
const win = new BrowserWindow({
width: 800,
height: 600,
backgroundColor: '#000000'
webPreferences: {
additionalArguments: ["myvarvalue", "secondvarvalue", "--another=something"]
}
});
Run Code Online (Sandbox Code Playgroud)
渲染器
window.process.argv 看起来像这样:
["--num-raster-threads=2",
"--enable-gpu-memory-buffer-compositor-resources",
"--enable-gpu-async-worker-context",
...
"--renderer-client-id=4",
"myvarvalue",
"secondvarvalue",
"--another=something"]
Run Code Online (Sandbox Code Playgroud)
它将追加一个字符串数组。您可以做一些事情window.process.argv.slice(-3)来获取数组中的最后一项。
就像您说的那样,您要做的事情似乎很复杂,但这也许会有所帮助:
主要
const { ipcMain } = require('electron');
var mainProcessVars = {
somevar: "name",
anothervar: 33
}
ipcMain.on('variable-request', function (event, arg) {
event.sender.send('variable-reply', [mainProcessVars[arg[0]], mainProcessVars[arg[1]]]);
});
Run Code Online (Sandbox Code Playgroud)
渲染器
const { ipcRenderer } = electron;
electron.ipcRenderer.send('variable-request', ['somevar', 'anothervar']);
ipcRenderer.on('variable-reply', function (event, args) {
console.log(args[0]); // "name"
console.log(args[1]); // 33
});
Run Code Online (Sandbox Code Playgroud)
这样,您可以发送字符串以外的数据。
| 归档时间: |
|
| 查看次数: |
11985 次 |
| 最近记录: |