Chrome 데스크톱 알림 예 [닫힘]


409

Chrome 데스크톱 알림 은 어떻게 사용 합니까? 나는 그것을 내 자신의 코드에서 사용하고 싶습니다.

업데이트 : 다음은 웹킷 알림을 설명 하는 블로그 게시물 입니다.


2
나는 왼쪽했습니다 아래에 답을 년 11 월 2012로 업데이트 된 HTML 통지가되지되었다 후. 찾고있는 것과 같은 실제 예가 있습니다.
Dan Dascalescu


1
업데이트 : 2015 년 현재 웹 사이트는 사용자가 웹 사이트를 서핑하지 않을 때에도 전달되는 실제 푸시 알림을 보낼 수 있습니다. 이 답변을
collimarco

3
비공개로 표시 한 모든 유권자는 IE / Safari 애호가 여야합니다. 브라우저 알림, 특히 크롬에 대한 알림입니다. 그것이 주제에서 벗어난 경우 왜 많은 사람들이 그것을 좋아하고 그것을 처음에 별표 표시 한 것으로 표시합니까?
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>

우리는 W3C 알림 API를 사용하고 있습니다. 이것을 Chrome 확장 프로그램 알림 API 와 혼동하지 마십시오 . Chrome 확장 프로그램 알림은 분명히 Chrome 확장 프로그램에서만 작동하며 사용자의 특별한 권한이 필요하지 않습니다.

W3C 알림은 많은 브라우저에서 작동하며 ( 캐니 우스 지원 참조 ) 사용자 권한이 필요합니다. 모범 사례로서이 권한을 바로 구하지 마십시오. 사용자에게 먼저 알림을 원하는 이유를 설명하고 다른 푸시 알림 패턴을 확인하십시오 .

이 버그 로 인해 Linux에서는 Chrome이 알림 아이콘을 인식하지 않습니다 .

마지막 단어

알림 지원은 지난 몇 년 동안 다양한 API가 더 이상 사용되지 않아 지속적으로 변화하고 있습니다. 궁금한 점이 있으면이 답변의 이전 수정 사항을 확인하여 Chrome에서 사용 된 기능을 확인하고 다양한 HTML 알림에 대해 알아보세요.

이제 최신 표준은 https://notifications.spec.whatwg.org/에 있습니다.

서비스 담당자인지 여부에 따라 동일한 효과에 대해 두 가지 다른 호출이있는 이유에 대해서는 Google에서 근무하는 동안 제출 한이 티켓을 참조하십시오 .

도우미 라이브러리에 대해서는 notify.js 도 참조하십시오 .


4
@mghaoui-popular! = true (필수). 이 답변을 정답으로 표시했습니다.
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 2016 년

3
Windows 8의 Mozilla Fire fox에서 작업하는 동안 Chrome 버전 47.0.2526.80 dev-m 에서 작동하지 않음
Sarz

87

체크 디자인API 사양을 (여전히 초안의) 또는 간단한 예에서 소스 (더 이상 사용할 수 페이지)을 확인 : 그것은 주로의 호출이다 window.webkitNotifications.createNotification.

더 강력한 예제를 원한다면 (자신의 Chrome 확장 프로그램을 만들려고하고 권한, 로컬 저장소 등을 처리하는 방법을 알고 싶다면) Gmail 알리미 확장 프로그램을 확인하십시오 : 설치하는 대신 crx 파일 다운로드 압축을 풀고 소스 코드를 읽으십시오.


모든 브라우저에서 작동하는 것이 없습니까?
Royi Namir

@Royi, Firefox 확장 기능조만간 기본 Firefox 구현이 있습니다. Internet Explorer의 경우 가능한 해결책은 사이트 사용자에게 Chrome 프레임 을 다운로드하도록 요청 하는 것입니다. 알림이 작동하도록하는 실용적인 솔루션이기 때문입니다. 가 다른 마이크로 소프트 솔루션 .
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}`);
  }
}

코드 펜


@Miron 첫 번째 단락에서 하이퍼 링크를 살펴보십시오. 소스를 연결 한 다음 SO 에티켓에 따라 코드를 답변에 복사했습니다. MDN이 Wiki가 아니라면 저자가 누구인지 더 분명했을 것입니다. 그러나 나는 아무것도 척하지 않습니다.
mpen

그가 어디에서 썼는지 모르겠어요?
Brandito

codepen이 작동하지 않습니다
Stepan Yakovenko

1
@StepanYakovenko 코드 펜 링크를 다시 시도하십시오. else마지막에 문제가 무엇인지 알려주 는 추가 기능 을 추가 했습니다. 당신은 아마 전 세계적으로 나 같은 알림을 비활성화했습니다 : \
mpen

14

나는 http://www.html5rocks.com/en/tutorials/notifications/quick/#toc-examples를 좋아 하지만 오래된 변수를 사용하므로 데모가 더 이상 작동하지 않습니다. webkitNotifications지금 Notification입니다.


트위터 예제는 더 이상 작동하지 않습니다.
Dan Dascalescu 2

html5rocks.com/en/profiles에 알려야 합니다. em 중 하나가 Twitter에서 작동해야합니다. =)
Rudie

허. Hakim은 프레젠테이션 프레임 워크에 기여한 이래로 가장 잘 알리는 사람이었습니다 .
Dan Dascalescu

4

이 간단한 알림 래퍼를 만들었습니다. Chrome, Safari 및 Firefox에서 작동합니다.

아마도 Opera, IE 및 Edge에서도 가능하지만 아직 테스트하지 않았습니다.

https://github.com/gravmatt/js-notify 에서 notify.js 파일을 가져 와서 페이지에 넣으십시오.

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
<!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 19
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.