Electron 失败时重试加载网页

Coo*_*guy 4 html javascript ipc electron

我正在使用电子来显示一些网页。下面是我的编码:

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
    });

});
Run Code Online (Sandbox Code Playgroud)

它将首先进入第一个网页,然后在使用 ipc 模块从 javascript 接收到“重定向”命令后,它将重定向到第二个网页。但我需要检查第二个网页是否可以连接。如果无法连接(did-fail-load),则会再次转到第一个网页。如此循环下去。

我使用 console.log("did-fail-load") 检查它是否无法连接到第二页。但我发现它重复了呼叫。第一次连接第二个网页失败,出现一个console.log("did-fail-load"),第二次重试时,出现两个console.log("did-fail-load") ,第三次重试时,出现了三个console.log(“did-fail-load”)。这是因为 mainWindow 上出现重复调用的原因吗?

在电子中失败时重试加载网页的最佳方法是什么?

Rud*_*g9d 5

这是一篇旧帖子,但我觉得这个问题从未真正得到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
});
Run Code Online (Sandbox Code Playgroud)