2017-10-26 10 views
1

에서 나는 다음과 같이 새 창 위치는 전자

내 코드

입니다 (첫 번째 창은 중앙에서 열립니다) 현재 창 위치가 약간 오프셋 새 창을 여는 방법을 알고 있어야합니다

// index.js 

const {app,BrowserWindow,Menu,MenuItem,dialog}=require('electron'); 

function window_open(path){ 
    win = new BrowserWindow({show: false}) 
    win.loadURL(path); 
    win.once('ready-to-show',() => {win.show()}) 
} 


let win 

app.on('ready',event=>{ 
    'use strict'; 
    window_open(`file://${__dirname}/index.html`) 
}); 

센터의 초기 창이 열립니다. 또한이 코드는 모든 창을 중앙에, 같은 위치되는 것을 제외하고는 잘 작동 (cmd를 + N)

{ 
    label: 'File', 
    submenu: [ 
    {label: 'New Window', accelerator: 'CmdOrCtrl+N', click:() => (
    window_open(`file://${__dirname}/index.html`)) 
}, 

새 윈도우 명령에서이 기능을 전달하고있다. 나는 각각의 새로운 창을 약간 상쇄하고 싶다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

0

내가 배운 :

예를 들어이 더미 응용 프로그램을 참조하십시오 나는 다음과 같은 코드를 발견했다. 거기에 어떤을하고 그 위치에서 새 창을 상쇄하는 경우 w는 달리 중앙에 새 창을 생성합니다

let win = null 
function window_open(path){ 
    const opts = {show: false} 
    if (BrowserWindow.getFocusedWindow()) { 
    current_win = BrowserWindow.getFocusedWindow() 
    const pos = current_win.getPosition() 
    Object.assign(opts, { 
     x: pos[0] + 22, 
     y: pos[1] + 22 
    }) 
    } 
    win = new BrowserWindow(opts) 
    win.loadURL(path) 
    win.once('ready-to-show',() => {win.show()}) 
} 

app.once('ready',event=>{ 
    window_open(`file://${__dirname}/index.html`) 
}); 

이 내 원래의 질문에 요청, 그래서이 게시하기로 결정했습니다 무엇 않습니다. 그러나 새 창을 생성하는 속도가 느리다는 것을 느낍니다. 따라서 더 빠른 접근 방법이 있는지 알아보기위한 대답으로 표시하지 않겠습니다.


업데이트 : 내가 'ready-to-show'에 기다리는는 준비 상태를 기다립니다, 그것은 천천히 만드는 것입니다 것을 발견했다. 속도 문제가 브라우저가 아닌 콘텐츠에 의존한다고 느낄 때 이것을 대답으로 받아 들였습니다. 내가 아직 열려있는 귀인 것에 관해서는이 말을 자유롭게 덧붙여 라.

1

생성자 옵션 xy에서 창 위치를 정의 할 수 있습니다. 현재 활성 창 위치는 getPosition()으로 검색 할 수 있으므로 새 창에 대한 오프셋을 정의 할 수 있습니다. @ pergy의 반응과 결합

  1. BrowserWindow.getFocusedWindow()
  2. win.getPosition()

: 나는이 두 가지가 필요하다고

const { app, BrowserWindow } = require('electron') 

let win = null 
app.once('ready',() => { 
    const openWindow =() => { 
    const opts = { 
     show: false 
    } 
    if (win) { 
     const pos = win.getPosition() 
     Object.assign(opts, { 
     x: pos[0] + 10, 
     y: pos[1] + 10 
     }) 
    } 
    win = new BrowserWindow(opts) 
    win.loadURL('http://google.com') 
    let thisWin = win 
    win.once('ready-to-show',() => { 
     thisWin.show() 
    }) 
    } 
    setInterval(openWindow, 5000) 
}) 
+0

고맙습니다. –

+0

정말 빨리 cmd + n을 클릭하면 오프셋 지연이 있다는 것을 알았 기 때문에 응답 된 마크를 지금 제거했습니다. 예를 들어, cmd + n을 정말 빠르게 3 번 클릭하면 오프셋은 22x3 = 66이됩니다. 왜 이것이 가능한지 혼란스러워합니다. –

+0

@JosephKim 예, 간격을 좁혀 재생할 수도 있습니다. 내가 본 것은'opts'가 맞지만 모든 창이 열리지는 않는다는 것입니다. – pergy