var paramsValue='' ipcRenderer.on("setUrl",(event,params)=>{ paramsValue=params }) contextBridge.exposeInMainWorld('windowSetUrl', { downloadPath:paramsValue }); 我已经给 paramsValue=params 赋值了 为什么 downloadPath 为‘’
时间: 2023-12-28 19:03:55 浏览: 76
这可能是因为 `ipcRenderer` 是异步操作,所以在 `exposeInMainWorld` 中暴露的 `windowSetUrl` 对象的 `downloadPath` 属性可能在 `ipcRenderer.on` 回调函数执行之前就已经被访问了,此时 `paramsValue` 的值还没有被赋值,因此 `downloadPath` 的值为 `''`。
要解决这个问题,可以将 `exposeInMainWorld` 和 `ipcRenderer.on` 的代码放在同一个函数中,并且在 `ipcRenderer.on` 回调函数中再次调用一个回调函数来传递参数。例如:
```
function setDownloadPath() {
let downloadPath = '';
ipcRenderer.on('setUrl', (event, params) => {
downloadPath = params;
onDownloadPathChange(downloadPath);
});
function onDownloadPathChange(downloadPath) {
contextBridge.exposeInMainWorld('windowSetUrl', { downloadPath });
}
}
setDownloadPath();
```
这样,`exposeInMainWorld` 中暴露的 `windowSetUrl` 对象的 `downloadPath` 属性就能在 `ipcRenderer.on` 回调函数中正确地设置了。
阅读全文