• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] Notification() in Chrome geändert

mikdoe

Moderator
Guten Morgen!

Irgendwann kürzlich muss im Chrome etwas bezüglich der Notification() API geändert worden sein.

Folgender Code: Noti Tests
Läuft im Firefox wunderbar.

Aber Chrome sagt:
[Deprecation]Uncaught TypeError: Cannot read property 'checkPermission' of undefined...

Wie muss das für den Chrom aussehen? Ich finde keine vollständigen Beispiele im Netz. Auf den Seiten https://developers.google.com/web/updates/2016/01/notification-actions und https://developers.google.com/web/updates/2015/05/notifying-you-of-changes-to-notifications finde ich nur Code, der irgendwelche Fehler wirft, wenn ich ihn teste oder der garnichts Sichtbares macht, nicht einmal in der Console.

Danke und schonmal guten Rutsch! :victorious:
 
Ja, die webkitNotifications ist in Chrome nicht mehr gültig.

Du musst auf die Standard Implementierung zurückgreifen.
https://developer.mozilla.org/en-US/docs/Web/API/Notifications_API/Using_the_Notifications_API

Beachte:
In Chrome 62 and newer you cannot request notification api at all unless the site is https:// secured. (see issue 779612) If you do have https on the site you should be able to use notifications and background push notifications.
Dieser https rotz ist mir echt ein dorn im Auge:mad:

bei mir geht:
Code:
 window.Notification.requestPermission(function() {
            alert('Permissions state: ' + window.Notification.permission);
        });
oder
Code:
 if(window.Notification.permission !== 'granted') {
            alert('Permissions hasnt been granted');
        }
 
Frohes Neues xorg und allen Anderen!

Ich habe hier mit dem neuesten Opera eine Endlosschleife mit der .then() Syntax. Habe es deshalb erst einmal umgestellt auf Standard Syntax gemäß https://developer.mozilla.org/de/docs/Web/API/notification :
HTML:
Notification.requestPermission(function(resultat) {
	if (resultat === 'granted') {
		kalender_alarm_setzen(getdata);
	}
});

Bin aber noch nicht fertig. Denn jetzt ist es zwar keine Endlosschleife mehr aber Opera will genauso wie Chrome eine https Verbindung. Muss jetzt erstmal sehen, wie ich das bekomme. Werde wieder berichten.

Firefox ist zumindest schonmal zufrieden und der Edge ab 1709 Update scheint es auch zu fressen, das muss ich noch genauer testen, weil ich das 1709 auf Produktivsystemen noch scheue. Mit https://www.browserling.com/ geht das geil, ist aber nur 3 Minuten täglich kostenfrei :icon6:
 
Bin hier ein kleines Stückchen weiter dank Sonntag :)

Problem: der Browser wartet mit meiner Syntax nicht auf die Benutzerentscheidung ob Benachrichtigungen zugelassen oder verboten sind.
Im Testcode unter MDN Notification ist das OK aber worin genau liegt der Unterschied, dass es mit meinem Code nicht geht?

Mein Code online: https://mikdoe.lima-city.de/test_noti.html

oder hier:
HTML:
<!DOCTYPE html>
<html>
	<head>
		<title>Test</title>
		<meta charset="utf-8">
<style type="text/css">
.tstf_wnoti_gruen_rot{
	padding-left:				10px;
	padding-right:				10px;
	width:						12px;
	height:						12px;
}
.tstf_wnoti_hinweis{
	background-color:			yellow;
	padding:					2px;
	line-height:				20px;
}
</style>
	</head>
	<body>
		<script>
"use strict";
var hakengruen = '<img src="http://mikdoe.lima-city.de/images/haken_gruen_klein.png" class="tstf_wnoti_gruen_rot">';
var kreuzrot = '<img src="http://mikdoe.lima-city.de/images/cross_klein.png" class="tstf_wnoti_gruen_rot">';

function webnoti(in_out) {
	if (!in_out.get) { in_out.get = {}; }

	// das jeweilige Kommando
	switch(in_out.set.act) {

		// Aktuellen Status der Berechtigung abfragen
		case 'status':
			in_out.get.result = Notification.permission;
			break;

		// Browser fordert die Berechtigung beim Benutzer an
		case 'get permission':
			Notification.requestPermission(function(perm) {
				in_out.get.ergebnis = perm;
			});
			break;

		// Default sagt nur 'Hallo'
		default:
			in_out.get.text = 'Hallo';
	}
}
		</script>


<div>
	<b>Teil 4 - Browser fordert die Berechtigung beim Benutzer an</b><br>
	<div id="testf_neu_wn_noti_requ_div"></div>
	<script>
		(function() {
			var set_get = {
				set			: {
					act			: 'status'
				}
			};
			webnoti(set_get);

			if (set_get.get.result === 'granted') {
				document.getElementById('testf_neu_wn_noti_requ_div').innerHTML = '<span'
					+' class="tstf_wnoti_hinweis">Für diesen Test bitte im Browser die bestehende Berechtigung'
					+' löschen (durch Klick links oben auf das Schloss)</span>'
				;
			}
			else {
				if (set_get.get.result === 'denied') {
					document.getElementById('testf_neu_wn_noti_requ_div').innerHTML = '<span'
						+' class="tstf_wnoti_hinweis">Für diesen Test bitte im Browser das generelle Verbot für'
						+' Benachrichtigungen entfernen (durch Klick links oben auf das Schloss)</span>'
					;
				}
				else {
					set_get = {
						set			: {
							act			: 'get permission',
						}
					};
					webnoti(set_get);

					document.getElementById('testf_neu_wn_noti_requ_div').innerHTML = 'Browser liefert: <b>'
						+set_get.get.ergebnis
						+'</b>'
						+(set_get.get.result === 'granted' ? hakengruen : kreuzrot)
					;
				}
			}
		})();
	</script>
	<hr>
</div>
	</body>
</html>
Danke und euch einen schönen Sonntag!
 
aber worin genau liegt der Unterschied, dass es mit meinem Code nicht geht?
du führst deinen code nicht im callback aus.
du hast im prinzip das
Code:
<!DOCTYPE html>
<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    <script>
      function xxx()
      {
        setTimeout(function()
        {
          console.log("callback");
        }, 0);
      }
      xxx();
      console.log("main");
  </script>
  </body>
</html>
 
Und wie sag ich der webnoti() dass sie mit der Rückkehr erst auf Notification.requestPermission() warten muss?
 
Und wie sag ich der webnoti() dass sie mit der Rückkehr erst auf Notification.requestPermission() warten muss?
indem du die notification in dem callback (oder einer aus dem callback gerufenen funktion) absetzt, oder das promise-objekt zurücklieferst und die notification in dessen then-callback absetzt.
 
Vielen Dank hesst! Jetzt hab' ich's.

Lösung: https://mikdoe.lima-city.de/test_noti_loesung.html

HTML:
<!DOCTYPE html>
<html>
	<head>
		<title>Test</title>
		<meta charset="utf-8">
<style type="text/css">
.tstf_wnoti_gruen_rot{
	padding-left:				10px;
	padding-right:				10px;
	width:						12px;
	height:						12px;
}
.tstf_wnoti_hinweis{
	background-color:			yellow;
	padding:					2px;
	line-height:				20px;
}
</style>
	</head>
	<body>
		<script>
"use strict";
var hakengruen = '<img src="http://mikdoe.lima-city.de/images/haken_gruen_klein.png" class="tstf_wnoti_gruen_rot">';
var kreuzrot = '<img src="http://mikdoe.lima-city.de/images/cross_klein.png" class="tstf_wnoti_gruen_rot">';

function webnoti(in_out) {
	if (!in_out.get) { in_out.get = {}; }

	// das jeweilige Kommando
	switch(in_out.set.act) {

		// Aktuellen Status der Berechtigung abfragen
		case 'status':
			in_out.get.result = Notification.permission;
			break;

		// Browser fordert die Berechtigung beim Benutzer an
		case 'get permission':
			Notification.requestPermission(function(perm) {
				if (in_out.set.callback) { in_out.set.callback(perm); }
			});
			break;

		// Default sagt nur 'Hallo'
		default:
			in_out.get.text = 'Hallo';
	}
}
		</script>


<div>
	<b>Teil 4 - Browser fordert die Berechtigung beim Benutzer an</b><br>
	<div id="testf_neu_wn_noti_requ_div"></div>
	<script>
		(function() {
			var set_get = {
				set			: {
					act			: 'status'
				}
			};
			webnoti(set_get);

			if (set_get.get.result === 'granted') {
				document.getElementById('testf_neu_wn_noti_requ_div').innerHTML = '<span'
					+' class="tstf_wnoti_hinweis">Für diesen Test bitte im Browser die bestehende Berechtigung'
					+' löschen (durch Klick links oben auf das Schloss)</span>'
				;
			}
			else {
				if (set_get.get.result === 'denied') {
					document.getElementById('testf_neu_wn_noti_requ_div').innerHTML = '<span'
						+' class="tstf_wnoti_hinweis">Für diesen Test bitte im Browser das generelle Verbot für'
						+' Benachrichtigungen entfernen (durch Klick links oben auf das Schloss)</span>'
					;
				}
				else {
					set_get = {
						set			: {
							act			: 'get permission',
							callback	: function(result) {
								document.getElementById('testf_neu_wn_noti_requ_div').innerHTML = 'Browser'
									+' liefert: <b>'
									+result
									+'</b>'
									+(result === 'granted' ? hakengruen : kreuzrot)
								;
							}
						}
					};
					webnoti(set_get);
				}
			}
		})();
	</script>
	<hr>
</div>
	</body>
</html>
 
Zurück
Oben