Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.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 在主渲染器和渲染器之间加载html后获取消息时出现问题_Javascript_Electron - Fatal编程技术网

Javascript 在主渲染器和渲染器之间加载html后获取消息时出现问题

Javascript 在主渲染器和渲染器之间加载html后获取消息时出现问题,javascript,electron,Javascript,Electron,我正在构建一个电子应用程序,我遇到了以下问题。 我用一个设备的插座获取信息,它工作正常。如果程序获得一种消息类型,我想更改页面的html,所以基本上我使用了loadUrl方法,但是在向渲染器进程发送消息之后,我似乎没有收到消息 我的代码: photoViewOn = false; ... app.on('ready', function(){ // Create new window mainWindow = new BrowserWindow({ backgroun

我正在构建一个电子应用程序,我遇到了以下问题。 我用一个设备的插座获取信息,它工作正常。如果程序获得一种消息类型,我想更改页面的html,所以基本上我使用了loadUrl方法,但是在向渲染器进程发送消息之后,我似乎没有收到消息

我的代码:

photoViewOn = false;
...
app.on('ready', function(){
    // Create new window
    mainWindow = new BrowserWindow({
      backgroundColor: '#000000',
      fullscreen : true, 
      frame : false,
      icon : __dirname + "/res/logo.png",
      webPreferences: {
        nodeIntegration : true
      }
    });


    mainWindow.webContents.openDevTools();
    // Load html in window
    mainWindow.loadURL(url.format({
      pathname: path.join(__dirname, 'bigNames.html'),
      protocol: 'file:',
      slashes:true,
    }))...)

function HTMLupdate(msg) {
  mainWindow && mainWindow.webContents.send('update', msg);


var server = socketBuilder('localhost', '7777',  {
   message: (msg, rinfo) => {
     try {
      console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
      var infoMap = processCyrano(msg);
      //if (infoMap["Com"] === "")
      if (infoMap != null) {
        if (infoMap["Com"] === "INFO") {
          if (photoViewOn) {
            photoViewOn = false;
            bigNamesView();
          }
          console.log("Inside Infomap");
          console.log(`Left Fencer: ${infoMap["LeftName"]}`);
          console.log(`Right Fencer: ${infoMap["RightName"]}`);
          HTMLupdate(infoMap);
        }
      }
    }

    catch (error) {
      console.log(`Error ${error}`);
    }


   },
   error: (err) => {
     console.log(`server error:\n${err.stack}`);
     server.close();
   },
   listen: () => {
     const address = server.address();
     console.log(`server listening ${address.address}:${address.port}`);
   }
});


function photoView() {
  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'photos.html'),
    protocol: 'file:',
    slashes:true,
  }));
}


function bigNamesView() {
  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'bigNames.html'),
    protocol: 'file:',
    slashes:true,
  }));
}

function processCyrano(msg) {

  try {

    let stripMsg = msg.toString().split("%");
    let info = {};
    let compInfo = stripMsg[0].split("|");
    console.log(compInfo);

    if(compInfo[2] === "INFO" || compInfo[2] === "DISP") {
      let firstFencerInfo = stripMsg[1].split("|")
      let secondFencerInfo = stripMsg[2].split("|")
      info.Protocol = compInfo[1];
      info.Com = compInfo[2]
      info.Piste = compInfo[3]
      info.Compe = compInfo[4];
      info.Phase = compInfo[5];
      info.PoulTab = compInfo[6];
      info.Match = compInfo[7];
      info.Round = compInfo[8];
      info.RightId = firstFencerInfo[1];
      info.RightName = firstFencerInfo[2];
      info.RightNat = firstFencerInfo[3];
      info.Rscore = firstFencerInfo[4];
      info.Rstatus = firstFencerInfo[5];
      info.RYcard = firstFencerInfo[6];
      info.Rrcard = firstFencerInfo[7];
      info.Rlight = firstFencerInfo[8];
      info.RWlight = firstFencerInfo[9];
      info.LeftId = secondFencerInfo[1];
      info.LeftName = secondFencerInfo[2];
      info.LeftNat = secondFencerInfo[3];
      info.Lscore = secondFencerInfo[4];
      info.Lstatus = secondFencerInfo[5];
      info.LYcard = secondFencerInfo[6];
      info.Lrcard = secondFencerInfo[7];
      info.Llight = secondFencerInfo[8];
      info.LWlight = secondFencerInfo[9];
      lastMatch = info;
      return info;
    }

    else if (compInfo[2] === "PHOTO-NEXT") {
      console.log("Photo-Next received");
      photoViewOn = true;
      photoView();
    }

    else if (compInfo[2] === "PHOTO-SCORE") {
      console.log("Photo-score received");
      photoViewOn = true;
      photoView();
    }

    else if (compInfo[2] === "PHOTO-STOP") {
      console.log("Photo-Stop received");
      return lastMatch;
    }
    return null;
  }
  catch (error) {
    //Avoid empty messages of the protocol
    console.log(`Error ${error}`);
    return null;
  }
}
基本上,我的尝试是,如果我收到一条“Photo Score”消息,调用photoView()(这很好),如果收到“Photo Stop”,则调用bigNamesView()并开始使用HTMLUpdate(msg)发送信息,但这对我不起作用。你知道为什么会这样吗?
注意,我删除了一些不相关的代码。谢谢。

嗨,我的朋友,你的问题是
lastMatch=info
只发生在内部

if(compInfo[2]==“INFO”| | compInfo[2]==“DISP”){

因此,只有当收到
“照片停止”
时,您才返回
lastMatch

在代码内部,只有当我们收到
INFO
call bigNamesView()时,您的逻辑才会显示

但您只想在我们收到
PHOTO-STOP
call bigNamesView()时使用

关于loadurl方法您可以调用
main window.webContents.send('update',msg);
在HTMLupdate中立即等待事件加载完成,然后调用send update msg

win.webContents.on('did-finish-load', () => {
    HTMLupdate(infoMap);
  })

嗨,我的朋友,你的问题是,
lastMatch=info
只发生在内部

if(compInfo[2]==“INFO”| | compInfo[2]==“DISP”){

因此,只有当收到
“照片停止”
时,您才返回
lastMatch

在代码内部,只有当我们收到
INFO
call bigNamesView()时,您的逻辑才会显示

但您只想在我们收到
PHOTO-STOP
call bigNamesView()时使用

关于loadurl方法您可以调用
main window.webContents.send('update',msg);
在HTMLupdate中立即等待事件加载完成,然后调用send update msg

win.webContents.on('did-finish-load', () => {
    HTMLupdate(infoMap);
  })

在您的服务器中,您具有该条件

if (photoViewOn) {bigNamesView()}
但在函数processCyrano中,“PHOTO-STOP”的条件不会将photoViewOn设置为true

else if (compInfo[2] === "PHOTO-STOP") {
      console.log("Photo-Stop received");
      return lastMatch;
    }
改为

else if (compInfo[2] === "PHOTO-STOP") {
      console.log("Photo-Stop received");
      photoViewOn = true;
      return lastMatch;
    }

在您的服务器中,您具有该条件

if (photoViewOn) {bigNamesView()}
但在函数processCyrano中,“PHOTO-STOP”的条件不会将photoViewOn设置为true

else if (compInfo[2] === "PHOTO-STOP") {
      console.log("Photo-Stop received");
      return lastMatch;
    }
改为

else if (compInfo[2] === "PHOTO-STOP") {
      console.log("Photo-Stop received");
      photoViewOn = true;
      return lastMatch;
    }

感谢您的回复。这与其说是一个实际答案,不如说是一个评论。另外,我认为这与我关于loadUrl()为什么要更改主进程和呈现进程之间的连接的问题无关。感谢您的回复。这与其说是一个实际答案,不如说是一个评论。此外,我认为这与我关于loadUrl()为什么的问题无关正在更改主进程和渲染进程之间的连接。您好,您是否再次检查我的答案?我是在第二天编辑的您好,您是否再次检查我的答案?我是在第二天编辑的