2011-02-05 10 views
62

मैं आजकल जीमेल के समान कार्यक्षमता को कार्यान्वित करना चाहता हूं। जब नया ईमेल आता है या नई चैट आती है, अधिसूचना पॉपअप प्रकट होता है और यदि आप इसे क्लिक करते हैं, तो जीमेल के साथ टैब फोकस हो जाता है।डेस्कटॉप सूचना बनाने वाले क्रोम टैब पर फ़ोकस कैसे प्राप्त करें?

var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text'); 
n.onclick = function(x) { this.cancel(); }; 
n.show(); 

जब मैं अधिसूचना क्लिक करें यह यह सिर्फ गायब बनाता है:

मैं इस कोड है। अब मुझे इस अधिसूचना को बनाए गए पृष्ठ को लाने और ध्यान केंद्रित करने के लिए फ़ंक्शन ऑनक्लिक फ़ंक्शन पर कुछ कोड जोड़ने की आवश्यकता है। मुझे पता है कि यह संभव है क्योंकि जीमेल इसे बहुत अच्छी तरह से करता है। लेकिन मैं जीमेल स्रोतों को देखने में सफल नहीं हुआ (वे कम से कम और obfuscated हैं)।

कोई भी जानता है कि यह कैसे करें?

उत्तर

82

आप Google क्रोम में विंडो.फोकस() डाल सकते हैं। क्लिक करते समय यह उस विंडो पर ध्यान केंद्रित करेगा।

var n = window.webkitNotifications.createNotification('ico.gif', 'Title', 'Text'); 
n.onclick = function(x) { window.focus(); this.cancel(); }; 
n.show(); 

मैं Gmail में निरीक्षक खोला, इसके बाद के संस्करण कोड जोड़ा, एक अलग टैब में ले जाया गया है, और यह भाग गया। अधिसूचना दिखाई दी और एक बार क्लिक किया, यह मुझे वापस जीमेल में लाया।

आशा है कि इससे मदद मिलेगी!

+3

वाह! यह सरल है ?! :-) महान जवाब, धन्यवाद। मैं इसके लिए थोड़ी देर गुगल गया, लेकिन इसे नहीं मिला। अब यह पूरी तरह से काम करता है, धन्यवाद। – Frodik

+1

कोई समस्या नहीं! मज़ेदार हैकिंग करें :-) –

+0

अब काम नहीं करता है http://jsfiddle.net/l2aelba/RhHgR/ :(, मैं इस विंडो को वापस ध्यान केंद्रित करने के लिए चेतावनी() की तरह हैक कर सकता हूं – l2aelba

42

Notifications का उपयोग करना।

if (typeof Notification !== 'undefined') { 
    alert('Please us a modern version of Chrome, Firefox, Opera or Safari.'); 
    return; 
} 

Notification.requestPermission(function (permission) { 
    if (permission !== 'granted') return; 

    var notification = new Notification('Here is the title', { 
    icon: 'http://path.to/my/icon.png', 
    body: 'Some body text', 
    }); 

    notification.onclick = function() { 
    window.focus(); 
    }; 
}); 
+0

'window.focus(); चाल चलती है! इसे सही उत्तर के रूप में चिह्नित किया जाना चाहिए। –

+0

'window.focus()' क्रोम 60 पर काम नहीं, 'parent.focus()' साथ jazzcat समाधान – pikax

0

यह this.close() बजाय this.cancel(), इस तरह होना चाहिए:

var n = window.webkitNotifications.createNotification('ico.gif','Title', 'Text'); 
n.onclick = function(x) { window.focus(); this.cancel(); }; 
n.show(); 
14

window.focus() हमेशा हाल वेबकिट ब्राउज़र संस्करणों (क्रोम, सफारी आदि) में काम नहीं करता। लेकिन parent.focus() करता है। https://jsfiddle.net/wv0w7uj7/3/

कोड::

function notifyMe() { 
    if (Notification.permission !== "granted") 
    Notification.requestPermission(); 
    else { 
    var notification = new Notification('Notification title', { 
     icon: 'http://cdn.sstatic.net/stackexchange/img/logos/so/so-icon.png', 
     body: "You've been notified!", 
    }); 

    notification.onclick = function() { 
     parent.focus(); 
     window.focus(); //just in case, older browsers 
     this.close(); 
    }; 
    } 
} 
+0

काम करता है क्यों downvote? 'notification.onclick = समारोह (evt: – jazzcat

+0

के लिए 'इस' anothe संदर्भ के लिए संदर्भित है, तो कॉल' this.close', यह 'कॉल करने के लिए 'onclick' घटना के evt.target.close' बेहतर है के बजाय सामान्य है) { evt.target.close(); } ' –

2

यह onclick संपत्ति का उपयोग करने वास्तव में अच्छा नहीं अभ्यास है, addEventListener वेनिला के लिए उपयोग जावास्क्रिप्ट या jQuery के लिए on विधि

यहां एक संपूर्ण jsfiddle है।

var notify = new Notification('Test notification'); 

वेनिला:

notify.addEventListener('click', function(e) { 
    window.focus(); 
    e.target.close(); 
}, false); 

jQuery:

$(notify).on('click', function(e) { 
    window.focus(); 
    e.target.close(); 
}); 
संबंधित मुद्दे