2015-09-11 20 views
15

का उपयोग कर डेस्कटॉप एप्लिकेशन में विंडो बंद फ़ंक्शन तक नहीं पहुंच सकता है मैं node.js और backbone.js का उपयोग कर एक विंडोज डेस्कटॉप एप्लिकेशन विकसित कर रहा हूं। जब मैं टाइटल बार पर बंद बटन पर क्लिक करके या विंडोज टास्कबार से एप्लिकेशन पर राइट क्लिक करके ऐप बंद कर देता हूं तो मैं एक क्रिया करना चाहता हूं।नोड जेएस

मेरे app.js इस तरह दिखता है,

var app = module.exports = require('appjs'); 


app.serveFilesFrom(__dirname + '/content/assets/'); 

var menubar = app.createMenu([ { 
label : '&File', 
submenu : [ { 
    label : 'E&xit', 
    action : function() { 
     window.close(); 
    } 
},{ 
    label : 'New', 
    action : function() { 
     window.test(); 
    } 
} ] 
}, { 
label : '&Window', 
submenu : [ { 
    label : 'Fullscreen', 
    action : function(item) { 
     window.frame.fullscreen(); 
     console.log(item.label + " called."); 
    } 
}, { 
    label : 'Minimize', 
    action : function() { 
      console.log("df"); 
     window.frame.minimize(); 
    } 
}, { 
    label : 'Maximize', 
    action : function() { 
     console.log("nnnnnnlaaaaaaaaaaaaaaa"); 
     window.frame.maximize(); 
    } 
}, { 
    label : ''// separator 
}, { 
    label : 'Restore', 
    action : function() { 
     window.frame.restore(); 
    } 
} ] 
} ]); 

menubar.on('select', function(item) { 
console.log("menu item " + item.label + " clicked"); 
}); 

var trayMenu = app.createMenu([ { 
label : 'Show', 
action : function() { 
    window.frame.show(); 
}, 
}, { 
label : 'Minimize', 
action : function() { 
    window.frame.hide(); 
} 
}, { 
label : 'Exit', 
action : function() { 
    window.close(); 
} 
} ]); 

var statusIcon = app.createStatusIcon({ 
icon : './data/content/icons/32.png', 
tooltip : 'AppJS Hello World', 
menu : trayMenu 
}); 



var window = app.createWindow({ 
width : 1024,// 640 
height : 768, 
showChrome: true, 
icons : __dirname + '/content/icons' 
}); 
window.on('create', function() { 
console.log("Window Created"); 
window.frame.show(); 
window.frame.center(); 
window.frame.maximize(); 
window.frame.setMenuBar(menubar); 
}); 

window.on('ready', function() { 
console.log("Window Ready");  
window.require = require; 
window.process = process; 
window.module = module; 
//window.frame.openDevTools(); 
window.fileAssoc = process.mainModule.filename; 
//window.readMyFile(); 
function F12(e) { 
    return e.keyIdentifier === 'F12' 
} 
function Command_Option_J(e) { 
    return e.keyCode === 74 && e.metaKey && e.altKey 
} 


     });*/ 


window.addEventListener('keydown', function(e) { 
console.log("hi");  
    if (F12(e) || Command_Option_J(e)) {    
     window.frame.openDevTools(); 
    } 
    }); 
    }); 

कृपया संलग्न स्क्रीनशॉट पाते हैं। मैं "फ़ाइल" & "विंडोज" के अंदर कस्टम अतिरिक्त कार्यक्षमताओं पर कार्रवाई करने में सक्षम हूं।

लेकिन मुझे नहीं पता कि घटना को कैप्चर करना है जब शीर्षक बार में डिफ़ॉल्ट ऐप बंद बटन को विंडोज़ टास्क बार से एप्लिकेशन पर राइट क्लिक करके क्लिक या बंद किया जाता है। कृपया मदद करे।

var gui = require("nw.gui"); 

var win_main = gui.Window.get(); 
win_main.on('close', function() { 
    this.hide(); // Pretend to be closed already 
    alert("Closing..."); 

    // here you detect if data is saved, and if not, ask user if they want to save 

    this.close(true); // if this line executes the app closes, if not, 
         // app stays opened 
}); 

मैं: enter image description here

अग्रिम धन्यवाद

+0

क्या यह वह ईवेंट है जिसे आप ढूंढ रहे हैं: https://msdn.microsoft.com/en-us/library/system.windows.forms.form.closing(v=vs.110).aspx – LGSon

+0

हां, पहला मैं वही हूं जो मैं ढूंढ रहा हूं। लेकिन मुझे नहीं पता कि जावास्क्रिप्ट (नोड जेएस) का उपयोग कर विंडो बंद घटना कैसे प्राप्त करें। –

उत्तर

5

UPDATED

आप इस तरह करना चाहिए (ईवेंट सक्रिय करने के लिए उचित तरीके से दिखाने के लिए कुछ और कोड पंक्तियां जोड़ी) उपरोक्त कोशिश की और यह सही काम करता है। यह विंडोज़ में "बंद करें बटन" क्लिक और कुंजी शॉर्टकट जैसे "Ctrl + F4" को पकड़ता है।

आगे पढ़ने के लिए (टिप्पणियों से ले जाया गया):

http://tutorialzine.com/2015/01/your-first-node-webkit-app/

https://nodesource.com/blog/node-desktop-applications

https://gist.github.com/LeCoupa/80eca2716a2b13c37cce

https://github.com/nwjs/nw.js/

https://github.com/nwjs/nw.js/wiki/window

+0

मैंने अपने उपरोक्त app.js में ऐसा करने की कोशिश की है लेकिन करीबी घटना इस विधि में प्रवेश नहीं कर रही है। window.on ('बंद करें', फ़ंक्शन() { console.log ("विंडो बंद करें"); }); क्या यह विंडो ऑब्जेक्ट जैसा है कि मैंने खिड़की बनाने के लिए उपयोग किया है ?? या इस तरह की कुछ चीज़। var window = gui.Window.get(); –

+0

इसका उत्तर नहीं दे सकता क्योंकि मेरे पास इसका परीक्षण करने के लिए आवश्यक टूल नहीं हैं। हालांकि, यह कहता है कि आपको नोड-वेबकिट की आवश्यकता है, है ना? – LGSon

+0

हां। मेरे पास है .... –

0

अंत में मैंने डिफ़ॉल्ट शीर्षक पट्टी को छिपाकर और एक कस्टम जोड़कर ऐसा किया है।

इसके लिए, मैंने विंडो निर्माण के दौरान एपजे में "शो क्रोम" विशेषता सेट की है, जो डिफ़ॉल्ट रूप से सत्य है।

कोड परिवर्तन

var window = app.createWindow({ 
    width : 1024,// 640 
    height : 768, 
    **showChrome: false**, 
    icons : __dirname + '/content/icons' 
    }); 

है लेकिन 'showChrome' विशेषता झूठी कार्य पट्टी भी जब तक हम कम से कम या एप्लिकेशन को बहाल छिपा दिया जाएगा करने के लिए सेट कर दिया जाता है।

+0

मेरे साथ एक चीज यह थी कि कोई भी विंडोज ओएस पर "Ctrl + F4" का उपयोग करके एक विंडो बंद कर सकता है, जो अभी भी उपयोगकर्ता को अपना डेटा सहेजने का मौका नहीं देता है ... क्या आपके लिए ऐसा ही होता है या आप उस घटना को पकड़ सकते हैं ? – LGSon

+0

नहीं। यह केवल तब होता है जब ऐप शीर्षक बार से बंद होता है। –

+0

आह, इसलिए यदि कोई उपयोगकर्ता आपके कस्टम "बंद/निकास" बटन के माध्यम से ऐप को किसी अन्य तरीके से बंद करता है तो आप उस ईवेंट को पकड़ने में सक्षम नहीं हैं और उपयोगकर्ता को सामग्री को सहेजने के लिए कोई चेतावनी नहीं है? – LGSon