#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) {
console.log("Loaded ", data);
});
Дело в том, что «данные» здесь иногда собираются очень быстро, и это работает нормально. Однако иногда это занимает некоторое время, а другое окно уже загружено в этот момент. В этом случае данные не принимаются, и сообщение об ошибке также отсутствует. Но тогда я могу просто использовать следующее, чтобы отправить его без проблем;
win.webContents.send('send-data', data)
Я не смог найти способ подать заявку в обоих случаях. Есть предложения?
Ответ №1:
Короткий ответ — нет.
У Electron нет функции для ожидания загрузки окна, а затем отправки сообщения или отправки сообщения сразу, если окно уже загружено.
Однако это можно сделать с помощью простого кода:
var hasWindowLoaded = false;
var hasDataBeenSent = false;
var data = {};
win.webContents.once('dom-ready', () => {
hasWindowLoaded = true;
if (!hasDataBeenSent amp;amp; data) {
win.webContents.send('send-data', data);
hasDataBeenSent = true;
}
});
// Now add this where you build the `data` variable.
function loadData () {
data = {'sampleData': 'xyz'};
if (!hasDataBeenSent amp;amp; hasWindowLoaded) {
win.webContents.send('send-data', data);
hasDataBeenSent = true;
}
}
Как только данные будут загружены, loadData
он проверит, закончена ли загрузка окна, и если да, то сразу отправляет данные.
В противном случае он сохраняет данные в переменной ( data
) и после загрузки окна отправляет их в окно.
Ответ №2:
Другой подход, который вы, возможно, захотите рассмотреть, — это отправка данных в browserWindow
строки запроса using.
const data = { hello: "world" }; // sample data
// send it using query strings
browserWindow.loadFile(YOUR_HTML_FILE_PATH, {
query: { data: JSON.stringify(data) },
});
// parse this data in the browserWindow
const querystring = require("querystring");
const query = querystring.parse(global.location.search);
const data = JSON.parse(query["?data"]);
console.log(data); // { hello: "world" }
Комментарии:
1. Если
data
переменная собрана после загрузки окна браузера, разве вам не пришлось бы перезагружать страницу сdata
помощью строки запроса, чтобы окно браузера получило данные?2. Данные будут в самом URL. Это будет в строках запроса. Тот факт, что окно браузера загружено или нет, не имеет значения.
3. @Joshua Я думаю, что я неправильно понял вопрос. Если вы используете метод строк запроса для отправки данных, вам нужно дождаться, пока данные будут собраны, а затем создать окно браузера.