我用电子显示一些网页。以下是我的编码:
var app = require('app');
var ipc = require('ipc');
var BrowserWindow = require('browser-window');
var settings = require('./settings');
var mainWindow = null;
app.on('window-all-closed', function() {
if (process.platform != 'darwin') {
app.quit();
}
});
app.on('ready', function(){
var mainWindow = new BrowserWindow({
fullscreen: true,
autoHideMenuBar: true
})
mainWindow.loadUrl('file://' + __dirname + '/index.html') // FIRST WEBPAGE
mainWindow.on('closed', function() {
mainWindow = null;
});
ipc.on('redirect', function(){
mainWindow.loadUrl('http://192.168.1.10/page2') // SECOND WEBPAGE
mainWindow.webContents.on("did-fail-load", function() {
console.log("did-fail-load");
mainWindow.loadUrl('file://' + __dirname + '/index.html');
// REDIRECT TO FIRST WEBPAGE AGAIN
});
});
首先进入第一个网页,然后收到命令"重定向"从使用ipc模块的javascript,它将重定向到第二个网页。但是我需要检查第二个网页是否可以连接。如果无法连接(无故障加载),它将再次转到第一个网页。循环还在继续。
我使用console.log(" did-fail-load")来检查它是否无法连接到第二页。但我发现它重复了这个电话。第一次无法连接到第二个网页时,有一个console.log("做失败加载"),当它第二次重试时,有两个console.log("出现了故障加载"),并且第三次重试时,会出现三个console.log(" did-fail-load")。它是如何在mainWindow上进行重复调用的?
在电子设备发生故障时重试加载网页的最佳方法是什么?
答案 0 :(得分:1)
你必须问自己一个问题:"为什么负载会失败?"和#34;它现在会加载吗?"
为什么要定义如何检查您的网页是否会加载的最佳方法。在加载之前检查url / server时,请确保可以加载它。然后它不再需要重新加载。
从您的代码中我猜,您要检查网络中的服务器是否正在运行。 为此,您可以使用节点模块node-net-ping https://github.com/stephenwvickers/node-net-ping
在你的应用程序中通过npm安装模块:
npm install node-net-ping --save
通过require:
将模块加载到顶部var ping = require ("net-ping");
检查他们的服务器是否可用:
var session = ping.createSession ();
session.pingHost ('192.168.1.10', function (error, target) {
if (!error)
// Load second page
});
另一个更好的解决方案是在加载网址之前检查请求。这也是用电子的node.js部分完成的。答案从这里复制: Node.js - How to check status of a URL within a http request
var request = require('request');
request('http://www.google.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log("URL is OK")
// Load second page
}
取决于"为什么负载失败?"你应该创建支票。
答案 1 :(得分:0)
这是一篇过时的文章,但是我觉得这个问题从来没有为OP真正回答过。
您看到多条console.log
消息,因为每次重定向发生时都会添加新的did-fail-load
回调。您只需在ipc.on('redirect')
回调之外添加一次回调。示例:
app.on('ready', function(){
var mainWindow = new BrowserWindow({
fullscreen: true,
autoHideMenuBar: true
})
mainWindow.loadUrl('file://' + __dirname + '/index.html') // FIRST WEBPAGE
mainWindow.on('closed', function() {
mainWindow = null;
});
/* Set did-fail-load listener once */
mainWindow.webContents.on("did-fail-load", function() {
console.log("did-fail-load");
mainWindow.loadUrl('file://' + __dirname + '/index.html');
});
});
/* This is called every time a redirect occurs,
* so don't add any listeners here. Only add code
* to handle the redirect
*/
ipc.on('redirect', function(){
mainWindow.loadUrl('http://192.168.1.10/page2') // SECOND WEBPAGE
});