ตัวอย่างการแจ้งเตือนบนเดสก์ท็อป Chrome [ปิด]


409

หนึ่งใช้การแจ้งเตือนบนเดสก์ท็อปของ Chromeอย่างไร ฉันต้องการใช้สิ่งนั้นในรหัสของฉันเอง

อัปเดต : นี่คือโพสต์บล็อกที่อธิบายการแจ้งเตือน webkit พร้อมตัวอย่าง


2
ฉันได้รับคำตอบด้านล่างอัปเดต ณ เดือนพฤศจิกายน 2012 หลังจากการแจ้งเตือน HTML กลายเป็นคัดค้าน มันมีตัวอย่างจริงเช่นเดียวกับที่คุณกำลังมองหา
Dan Dascalescu

1
ตัวอย่างและบทความ (2013): - smartjava.org/examples/notifications - smartjava.org/content/chrome-and-firefox-desktop-notificationsบทความเก่า (2010): - html5rocks.com/en/tutorials/notifications/quick
Christophe Roussy

1
อัปเดต : จนถึงปี 2015 เว็บไซต์ยังสามารถส่งการแจ้งเตือนแบบพุชจริงซึ่งจะถูกจัดส่งแม้ในขณะที่ผู้ใช้ไม่ได้ท่องเว็บไซต์ ลองดูคำตอบนี้
collimarco

3
ผู้มีสิทธิเลือกตั้งเหล่านี้ทั้งหมดสำหรับการทำเครื่องหมายเป็นปิดจะต้องเป็นคนรัก IE / Safari มันเป็นการเฉพาะสำหรับการแจ้งเตือนของเบราว์เซอร์และโดยเฉพาะอย่างยิ่งสำหรับ Chrome หากไม่เป็นเช่นนั้นแล้วทำไมมีคนจำนวนมากชื่นชอบและทำเครื่องหมายว่าติดดาวเป็นครั้งแรก
prash

2
ทำไมถึงปิดหัวข้อ?
SmartManoj

คำตอบ:


716

ในเบราว์เซอร์สมัยใหม่มีการแจ้งเตือนสองประเภท:

โทร API ใช้พารามิเตอร์เดียวกัน (ยกเว้นสำหรับการดำเนินการ - ไม่สามารถใช้ได้กับการแจ้งเตือนสก์ท็อป) ซึ่งมีเอกสารที่ดีพอในMDNและพนักงานบริการบนGoogle เว็บความรู้พื้นฐานเว็บไซต์


ด้านล่างนี้เป็นตัวอย่างการทำงานของการแจ้งเตือนทางเดสก์ท็อปสำหรับ Chrome, Firefox, Opera และ Safari โปรดทราบว่าด้วยเหตุผลด้านความปลอดภัยที่เริ่มต้นด้วย Chrome 62 การอนุญาตสำหรับ API การแจ้งเตือนอาจไม่ได้รับการร้องขอจาก iframe ที่มาข้ามดังนั้นเราจึงไม่สามารถสาธิตสิ่งนี้โดยใช้ตัวอย่างโค้ดของ StackOverflow คุณจะต้องบันทึกตัวอย่างนี้ในไฟล์ HTML บนเว็บไซต์ / แอปพลิเคชันของคุณและตรวจสอบให้แน่ใจว่าใช้localhost://หรือ HTTPS

// request permission on page load
document.addEventListener('DOMContentLoaded', function() {
 if (!Notification) {
  alert('Desktop notifications not available in your browser. Try Chromium.');
  return;
 }

 if (Notification.permission !== 'granted')
  Notification.requestPermission();
});


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: 'Hey there! You\'ve been notified!',
  });
  notification.onclick = function() {
   window.open('http://stackoverflow.com/a/13328397/1269037');
  };
 }
}
 <button onclick="notifyMe()">Notify me!</button>

เรากำลังใช้API การแจ้งเตือนของ W3C อย่าสับสนกับAPI การแจ้งเตือนส่วนขยายของ Chromeซึ่งแตกต่างกัน การแจ้งเตือนส่วนขยายของ Chrome ทำงานได้อย่างชัดเจนในส่วนขยายของ Chrome เท่านั้นและไม่ต้องการการอนุญาตพิเศษจากผู้ใช้

การแจ้งเตือน W3C ทำงานในเบราว์เซอร์จำนวนมาก (ดูการสนับสนุนเกี่ยวกับcaniuse ) และต้องได้รับอนุญาตจากผู้ใช้ เพื่อเป็นการปฏิบัติที่ดีที่สุดอย่าขออนุญาตนี้โดยทันที อธิบายให้ผู้ใช้ครั้งแรกว่าทำไมพวกเขาจะต้องการการแจ้งเตือนและดูอื่น ๆรูปแบบการแจ้งเตือนผลักดัน

โปรดทราบว่า Chrome ไม่เคารพไอคอนการแจ้งเตือนบน Linux เนื่องจากข้อบกพร่องนี้

คำพูดสุดท้าย

การสนับสนุนการแจ้งเตือนอยู่ในฟลักซ์อย่างต่อเนื่องโดย API ต่างๆถูกเลิกใช้ในปีที่ผ่านมา หากคุณอยากรู้ให้ตรวจสอบการแก้ไขคำตอบก่อนหน้านี้เพื่อดูสิ่งที่เคยใช้ใน Chrome และเรียนรู้เรื่องราวของการแจ้งเตือน HTML ที่หลากหลาย

ตอนนี้มาตรฐานล่าสุดที่https://notifications.spec.whatwg.org/

ว่าทำไมมีสองสายที่แตกต่างกันเพื่อให้ผลเช่นเดียวกันขึ้นอยู่กับว่าคุณอยู่ในคนงานบริการหรือไม่ได้ - ดูตั๋วนี้ฉันยื่นในขณะที่ผมทำงานที่ Google

โปรดดูที่notification.jsสำหรับห้องสมุดผู้ช่วยเหลือ


4
@mghaoui - ยอดนิยม! = จริง (จำเป็น) ฉันทำเครื่องหมายสิ่งนี้เป็นคำตอบที่ถูกต้อง
Sridhar Ratnakumar

2
window.webkitNotifications.checkPermission () จะแสดงข้อยกเว้นในเบราว์เซอร์ที่ไม่ใช่ Chrome
JT Taylor

2
การปิดไม่ใช่วิธีการ ฉันคิดว่าคุณต้องการ notification.cancel ()> decadecity.net/blog/2012/10/12/webkit-notification-api >> นอกจากนี้ยังดูเหมือนว่าจะปิดตัวเอง
KingOfHypocrites

3
ขอบคุณสำหรับการสนับสนุนการใช้สิ่งนี้กับ Pusher ได้ช่วยฉันสร้างระบบการแจ้งเตือน
Awijeet

3
ไม่ทำงานในChrome เวอร์ชัน 47.0.2526.80 dev-mขณะทำงานบน Mozilla Fire fox บน Windows 8
Sarz

87

ตรวจสอบการออกแบบและAPI เปค (ก็ยังคงเป็นร่าง) หรือตรวจสอบแหล่งที่มาจาก (หน้าไม่สามารถใช้ได้อีก) สำหรับตัวอย่างง่ายๆ: window.webkitNotifications.createNotificationมันเป็นส่วนใหญ่เรียกไปยัง

หากคุณต้องการตัวอย่างที่มีประสิทธิภาพมากขึ้น (คุณกำลังพยายามสร้างส่วนขยายของ Google Chrome ของคุณเองและต้องการทราบวิธีจัดการสิทธิ์การใช้งานพื้นที่จัดเก็บในตัวเครื่องและอื่น ๆ ) ให้ลองใช้Gmail Notifier Extension : ดาวน์โหลดไฟล์ crx แทนการติดตั้ง มันเปิดเครื่องรูดมันและอ่านรหัสต้นฉบับ


ไม่มีสิ่งใดที่เหมาะกับเบราว์เซอร์ทั้งหมดหรือไม่
Royi Namir

@Royi มีเป็นส่วนขยายของ Firefoxเช่นเดียวกับการดำเนินงานของ Firefox พื้นเมืองซึ่งจะมาเร็วหรือช้า ในกรณีของ Internet Explorer วิธีแก้ปัญหาที่เป็นไปได้คือขอให้ผู้ใช้เว็บไซต์ของคุณดาวน์โหลดChrome Frameเนื่องจากเป็นวิธีแก้ปัญหาที่ทำงานได้เพื่อให้การแจ้งเตือนทำงานได้ มีบางอย่างไมโครซอฟท์โซลูชั่นอื่น
Bryan Field

7
คำตอบนี้ล้าสมัยไปแล้วในตอนนี้ 4 ปีต่อมา @RoyiNamir: มี API การแจ้งเตือน ตรวจสอบคำตอบของฉัน
Dan Dascalescu

1
ลิงก์ตัวอย่างนั้นตาย
Vinny

33

ดูเหมือนว่าwindow.webkitNotificationsเลิกใช้แล้วและถูกลบออกไปแล้ว อย่างไรก็ตามมีAPI ใหม่และดูเหมือนว่าจะทำงานใน Firefox เวอร์ชันล่าสุดได้เช่นกัน

function notifyMe() {
  // Let's check if the browser supports notifications
  if (!("Notification" in window)) {
    alert("This browser does not support desktop notification");
  }

  // Let's check if the user is okay to get some notification
  else if (Notification.permission === "granted") {
    // If it's okay let's create a notification
    var notification = new Notification("Hi there!");
  }

  // Otherwise, we need to ask the user for permission
  // Note, Chrome does not implement the permission static property
  // So we have to check for NOT 'denied' instead of 'default'
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {

      // Whatever the user answers, we make sure we store the information
      if(!('permission' in Notification)) {
        Notification.permission = permission;
      }

      // If the user is okay, let's create a notification
      if (permission === "granted") {
        var notification = new Notification("Hi there!");
      }
    });
  } else {
    alert(`Permission is ${Notification.permission}`);
  }
}

codepen


@Miron โปรดดูไฮเปอร์ลิงก์ในย่อหน้าแรก ฉันเชื่อมโยงแหล่งที่มาแล้วคัดลอกรหัสไปยังคำตอบของฉันตามมารยาท SO ถ้า MDN ไม่ใช่วิกิฉันอาจจะชัดเจนกว่านี้เกี่ยวกับว่าผู้แต่งคือใคร แต่ฉันไม่แสร้งทำอะไร
mpen

ฉันไม่เห็นว่าที่เขาพูดว่าเขาเขียนมัน?
Brandito

codepen ใช้งานไม่ได้
Stepan Yakovenko

1
@StepanYakovenko ลองลิงค์ codepen อีกครั้ง ฉันเพิ่มelseส่วนท้ายเพื่อบอกคุณว่าปัญหาคืออะไร คุณอาจปิดการใช้งานการแจ้งเตือนทั่วโลกเช่นฉัน: \
mpen

14

ฉันชอบ: http://www.html5rocks.com/en/tutorials/notifications/quick/#toc-examplesแต่ใช้ตัวแปรเก่าดังนั้นการสาธิตไม่ทำงานอีกต่อไป อยู่ในขณะนี้webkitNotificationsNotification


ตัวอย่าง Twitter ไม่ทำงานอีกต่อไป
Dan Dascalescu

คุณควรบอกhtml5rocks.com/th/profilesหนึ่งใน em ต้องทำงานกับ Twitter =)
Rudie

หึ Hakim เป็นคนที่ดีที่สุดในการแจ้งเตือนเนื่องจากฉันได้มีส่วนร่วมในกรอบงานนำเสนอของเขา
Dan Dascalescu

4

ฉันทำ wrapper การแจ้งเตือนนี้ง่าย ๆ ใช้งานได้กับ Chrome, Safari และ Firefox

อาจเป็นบน Opera, IE และ Edge ด้วย แต่ฉันยังไม่ได้ทดสอบ

เพิ่งได้รับไฟล์ alert.js จากที่นี่https://github.com/gravmatt/js-notifyและวางไว้ในหน้าของคุณ

รับที่ Bower

$ bower install js-notify

นี่คือวิธีการทำงาน:

notify('title', {
    body: 'Notification Text',
    icon: 'path/to/image.png',
    onclick: function(e) {}, // e -> Notification object
    onclose: function(e) {},
    ondenied: function(e) {}
  });

คุณต้องตั้งชื่อ แต่วัตถุ json เป็นอาร์กิวเมนต์ที่สองเป็นตัวเลือก


@gravmatt คุณประสบปัญหากับ Firefox หรือไม่หากมีหน้าต่างเบราว์เซอร์เปิดมากกว่าหนึ่งหน้าต่างการแจ้งเตือนจะไม่ปรากฏขึ้น?
eran otzap

@eranotzap ควรทำงานกับหลายแท็บ ฉันเรียกใช้โครงการที่ไม่มีปัญหา แต่ฉันไม่แน่ใจว่ามีหลายหน้าต่าง
gravmatt

ฉันมีปัญหาเดียวกันกับแท็บหลายแท็บ
eran otzap

ใช้งานได้กับหลายแท็บใน Firefox หรือไม่
eran otzap

1
@eranotzap ฉันทดสอบตอนนี้บน windows และ mac ฉันไม่เห็นการแจ้งเตือนที่มุมใด ๆ ของหน้าจอ แต่ฉันได้ยินเสียงการแจ้งเตือนและใน mac ฉันได้รับการแจ้งเตือนในแถบด้านข้าง (เปิดหลายแท็บ) Firefox เป็นนักสำรวจอินเทอร์เน็ตคนใหม่
gravmatt

3

นี่คือเอกสารที่ดีเกี่ยวกับ API

https://developer.chrome.com/apps/notifications

และคำอธิบายวิดีโออย่างเป็นทางการจาก Google

https://developers.google.com/live/shows/83992232-1001


1
API นั้นใช้งานได้ในแอปและส่วนขยายของ Chrome เท่านั้น มันแตกต่างจากการแจ้งเตือน API
Dan Dascalescu


3
<!DOCTYPE html>

<html>

<head>
<title>Hello!</title>
<script>
function notify(){

if (Notification.permission !== "granted") {
Notification.requestPermission();
}
 else{
var notification = new Notification('hello', {
  body: "Hey there!",
});
notification.onclick = function () {
  window.open("http://google.com");
};
}
}
</script>
</head>

<body>
<button onclick="notify()">Notify</button>
</body>


1
โปรดงดเว้นการโพสต์คำตอบเฉพาะรหัสเท่านั้น เพิ่มความคิดเห็นเล็กน้อยและ / หรือคำอธิบายเพื่อที่ว่าเมื่อผู้คนอ่านโพสต์นี้ในอนาคตพวกเขาจะเข้าใจ
Adriaan

สำหรับตัวอย่างโค้ดนี้ดูเหมือนว่าจะตรงไปตรงมา ผู้ใช้รายอื่นสามารถโพสต์คำถามติดตามในความคิดเห็นใช่มั้ย
frostshoxx

1
JSfiddle ที่มีรหัสด้านบนใช้งานไม่ได้ "การอนุญาตสำหรับ API การแจ้งเตือนอาจไม่ได้รับการร้องขอจาก iframe ที่มีต้นกำเนิดข้าม" อย่างไรก็ตามเมื่อคุณเปิดคอนโซลนักพัฒนาซอฟต์แวร์และใส่Notification.requestPermission();แล้วvar notification = new Notification('hello', { body: "Hey there!", });แสดงให้เห็นว่าการแจ้งเตือนขึ้น
Kai Noack

ฉันขอโทษ แต่คำตอบนี้เพิ่มให้ฉันอย่างแน่นอน
Dan Dascalescu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.