2016-04-12 74 views
0

我有一個運行在菜單欄中的電子應用程序。電子從菜單欄打開新的全屏窗口

代碼目前主要基於現有的番茄時間應用(https://github.com/G07cha/pomodoro

當定時器擊中某一個點,它開闢了一個消息框:

ipc.on('end-timer', function() { 
    $('.timer').circleProgress('value', 1); 

    var isRelaxTime = remote.getGlobal('isRelaxTime'); 

    dialog.showMessageBox({ 
     type: 'info', 
     title: 'Pomodoro', 
     message: (isRelaxTime) ? 'Timer ended it\'s time to relax' : 'Back to work', 
     buttons: ['OK'], 
     noLink: true 
    }, function() { 
     if(isRelaxTime) { 
      $('.timer').circleProgress({fill: { gradient: ["blue", "skyblue"]}}); 
     } else { 
      $('#counter').text(remote.getGlobal('pomodoroCount')); 
      $('.timer').circleProgress({fill: { gradient: ["orange", "yellow"]}}); 
     } 

     ipc.send('start-timer'); 
    }); 
}); 

是否可以打開一個新的窗口而不是消息框,並使其全屏?

基本上,確保用戶看到它,並在定時器啓動時填充屏幕並允許自定義css等創建的頁面。

回答

1

這取決於您是否想從現有渲染器中觸發新的渲染器,或者是否要從主進程中旋轉它。

無論哪種方式,只需創建一個新的BrowserWindow實例並將URL加載到要加載的HTMl文件即可。

如果您想從現有渲染器啓動渲染器,則需要首先要求remote模塊。這裏有一個例子:

const remote = require('remote'); 

// create a new BrowserWindow and pass it an object of options 
var msgWindow = new remote.BrowserWindow({ 
    // full width & height of monitor without going into kiosk mode 
    width: remote.screen.getPrimaryDisplay().size.width, 
    height: remote.screen.getPrimaryDisplay().size.height 
    //, other options 
}); 

// load your message file into new browserwindow 
msgWindow.loadURL('file://' + __dirname + '/index.html'); 

// set variable to null when window is closed to clean it up 
msgWindow.on('close',() => { 
    msgWindow = null; 
}); 

如果你這樣做從主進程,然後更換const remote = require('remote');有:

const electron = require('electron'); 
const BrowserWindow = electron.BrowserWindow; 
+0

這並沒有爲我工作。當菜單欄應用程序未處於活動狀態時,我無法找到任何可以打開新窗口的示例,只有在應用程序處於活動狀態時纔打開新窗口。 –

+0

您需要某種過程才能運行,以便定時器正在運行。您可以在不打開窗口的情況下運行主進程,然後在計時器準備就緒時打開一個窗口。 –