2016-09-19 13 views
7
  • मैं एक लेखन आवेदन कर रहा हूं। उपयोगकर्ता ऐप खोल सकते हैं, कुछ टेक्स्ट लिख सकते हैं, अपना काम सहेज सकते हैं, आदि
  • मैं इसे बनाने की कोशिश कर रहा हूं ताकि window close बटन पर क्लिक करने से उपयोगकर्ता को (ए) अपने काम को सहेजने के लिए संकेत मिले (यदि आवश्यक हो) या (बी) अभी अभी छोड़ा।
  • मैं इसे प्राप्त करने के लिए window.beforeunload का उपयोग करने का प्रयास कर रहा हूं, लेकिन मुझे लगता है कि मैं एक लूप में फंस रहा हूं, जहां "छोड़ने" की कोशिश करने से एक ही संकेत विज्ञापन infinitum दिखाई देता है। जब आवेदन सेटअप है, खिड़की बंद करने के लिए एक घटना श्रोता की शुरुआत

    विंडो बंद करने से पहले सहेजने/छोड़ने के लिए संकेत

    windowCloseCheck() { 
    window.onbeforeunload = function(e) { 
        e.returnValue = false; 
    // window.alert('try to close me');  
    if(file.isUnsaved() || file.hasChanged()) { 
        // prompt - save or just quit? 
        file.fileWarning('You have unsaveeed work.', 'Save', 'Quit', function(){ 
        // OPTION A - save 
        file.save(); 
        }, function() { 
        // OPTION B: Quit. 
        ipcRenderer.send('quitter') 
        }) 
    } 
    
    else { 
        // file is saved and no new work has been done: 
        ipcRenderer.send('quitter') 
    } 
    

    windowCloseCheck शुरू हो जाती है:

यहाँ कुछ कोड है। मेरी सशर्त जांच कर रही है कि फ़ाइल सहेजा गया है या मूल से बदल गया है।

fileWarning एक ऐसा फ़ंक्शन है जो केवल इलेक्ट्रॉन संवाद बॉक्स को लपेटता है, जिससे प्रत्येक विकल्प के लिए कॉल करने के लिए दो विकल्प और संबंधित कार्यों के साथ पॉप अप दिखाई देता है।

शेष कोड available है यदि मैं (संभवतः) आवश्यक जानकारी छोड़ रहा हूं। अगर मैं बहुत स्पष्ट नहीं हूं तो स्पष्ट करने में खुशी होगी। वहाँ के रूप में बेहतर होने लगते हैं

ipcMain.on('quitter', (e) => { 
    mainWindow.destroy(); // necessary to bypass the repeat-quit-check in the render process. 
    app.quit() 
}) 

वास्तव में सुनिश्चित नहीं हैं कि अगर यह सिफारिश की है:

enter image description here

उत्तर

0

मैं (मुख्य प्रक्रिया से) बिट्स के लिए प्रक्रिया प्रस्तुत करना तोड़ window.destroy() का उपयोग कर के साथ जा रहा समाप्त हो गया एक इलेक्ट्रॉन ऐप को ठीक से छोड़ने के तरीके। यदि आप एक बेहतर उत्तर जानते हैं तो भी कोई प्रतिक्रिया प्राप्त करने के लिए अभी भी खुश!

/शग!

9

समारोह जहां ब्राउज़र विंडो को परिभाषित किया है अंदर निम्नलिखित खंड जोड़ें कृपया

// Create the browser window. 
    mainWindow = new BrowserWindow({width: 400, height: 400}) 


    mainWindow.on('close', function(e){ 
    var choice = require('electron').dialog.showMessageBox(this, 
     { 
      type: 'question', 
      buttons: ['Yes', 'No'], 
      title: 'Confirm', 
      message: 'Are you sure you want to quit?' 
     }); 
     if(choice == 1){ 
     e.preventDefault(); 
     } 
    }); 
+0

यह इस मुद्दे तक पहुंचने का सबसे अच्छा तरीका है। मैं अब कुछ दिनों के लिए अलग-अलग दृष्टिकोणों की कोशिश कर रहा हूं और हमेशा कुछ ऐसा होता है जिसे बाईपास करने की आवश्यकता होती है। हालांकि यह दृष्टिकोण पूरी तरह से काम करता है और समस्याओं का सामना किए बिना इसे पूरा करने का एकमात्र तरीका है ... कम से कम इलेक्ट्रॉन संस्करण 1.4.15 – Darthur

1

Awijeet के समाधान बिल्कुल सटीक है (मेरे मामले में यह CreateWindow() फ़ंक्शन main.js में घोषित है)! बीथ, thx Awijeet: यह मुझे घंटे बचा लिया! ;-)

इसके अतिरिक्त, यदि आपको आगे जाने की आवश्यकता है, तो e.preventDefault() कोड में हर जगह फैल रहा है। एक बार जब आप ठीक से preventDefault() प्रबंधित कर लेते हैं तो आपको अपने ऐप के प्राकृतिक व्यवहार पर वापस जाने के लिए चर e.defaultPrevented = false बदलना होगा।

असल में, ऐसा लगता है कि e.preventDefault() फ़ंक्शन e.defaultPrevented से true को तब तक बदलता है जब तक आप इसका मूल्य बदल नहीं लेते।

+0

e.defaultPrevented = false यह वही है जो मैं ढूंढ रहा था। धन्यवाद! –

संबंधित मुद्दे