Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Electron WebContent.send并不总是有效_Javascript_Electron - Fatal编程技术网

Javascript Electron WebContent.send并不总是有效

Javascript Electron WebContent.send并不总是有效,javascript,electron,Javascript,Electron,我使用以下命令将一些数据发送到另一个窗口 try{ win.webContents.once('dom-ready', () => win.webContents.send('send-data', data)); } catch(err){ console.log("Caught ",err); } 和用于接收 ipcRenderer.on('send-data', function (event,data) { cons

我使用以下命令将一些数据发送到另一个窗口

try{ 
    win.webContents.once('dom-ready', () => win.webContents.send('send-data', data)); 
}
catch(err){
    console.log("Caught ",err);
}   
和用于接收

ipcRenderer.on('send-data', function (event,data) {     
    console.log("Loaded ", data);   
 });
问题是,这里的“数据”有时组装得非常快,而且运行良好。但是,有时需要一段时间,此时另一个窗口已经加载。在这种情况下不会收到数据,也不会收到错误消息。但是,我可以简单地使用以下命令发送它,而不会出现问题

win.webContents.send('send-data', data)

我找不到一种方法来申请这两种情况。有什么建议吗?

简短的回答是没有

Electron没有等待窗口加载,然后发送消息的功能,或者如果窗口已经加载,则立即发送消息的功能

但是这可以通过一些简单的代码来完成:

var hasWindowLoaded=false;
var hasdatabensent=false;
变量数据={};
win.webContents.once('dom-ready',()=>{
hasWindowLoaded=true;
如果(!hasDataBeenSent&&data){
win.webContents.send('send-data',data);
hasDataBeenSent=true;
}
});
//现在在构建'data'变量的地方添加这个变量。
函数loadData(){
数据={'sampleData':'xyz'};
如果(!hasDataBeenSent&&hasWindowLoaded){
win.webContents.send('send-data',data);
hasDataBeenSent=true;
}
}
loadData
中加载数据后,它将检查窗口是否已完成加载,如果已完成加载,则会立即发送数据


< >它将数据存储在一个变量(<代码>数据< /代码>)中,一旦窗口加载,它就将它发送到窗口。

另一种可能要考虑的方法是使用查询字符串将数据发送到<代码>浏览器窗口< /代码>。
const data={hello:“world”};//样本数据
//使用查询字符串发送它
加载文件(您的HTML文件路径{
查询:{data:JSON.stringify(data)},
});
//在浏览器窗口中解析此数据
const querystring=require(“querystring”);
constquery=querystring.parse(global.location.search);
const data=JSON.parse(查询[“?数据]);
console.log(数据);//{你好:“世界”}

如果
数据
变量是在浏览器窗口加载后组装的,那么您不需要在查询字符串中重新加载包含
数据
的页面,以便浏览器窗口接收数据吗?数据将在url本身中。它将位于查询字符串中。浏览器窗口是否加载并不重要。@Joshua我想我误解了这个问题。如果使用查询字符串方法发送数据,则需要等待数据组装,然后创建浏览器窗口。