我一直在使用此演示中的代码进行测试:
https://davidwalsh.name/demo/notifications-api.php
上面的演示可以完美地在Chrome,Firefox和Edge上运行。
我用他的演示制作了一个.aspx页面。基本上查看源代码复制/粘贴。我只添加了<Form..> </Form>
,因此它可以在.aspx页中使用。当我上传到Godaddy时,它可以完美地在Firefox和Edge中运行,但在Chrome中无法运行。
有人建议从Godaddy使用Chrome的任何原因都不行吗? Javascript不是我的事,但是我找不到任何错误吗?
我的网站没有SSL会阻止通知正常工作吗?试图用谷歌搜索它,但是在与这个问题无关的切线上消失了。
谢谢
轻微更新。我的.aspx页也可以在Chrome(IIS Express)(和Firefox / Edge)上的localhost中运行。当我上传到Godaddy时,它才停止工作。它甚至从未要求允许Godaddy在Chrome上发送通知。如果我专门进入设置并添加URL以允许通知,则无法使用
-=-=-
最后一次编辑。这很难谷歌,因为在推送通知和网络通知之间似乎有很多相似的关键字。我正在做网络通知,但确实找到了这个:
此外,网络通知还可用于非SSL和SSL网站
这吹响了我的一个大理论……除非已经过时了。
几乎是核心代码...除我真正需要它工作的那个地方外,其他所有地方都可以使用
显示通知
<script type="text/javascript">
function showNotification() {
if(window.Notification) {
Notification.requestPermission(function(status) {
console.log('Status: ', status);
var n = new Notification('Title', { body: 'I am the body text!' });
});
}
else {
alert('Your browser doesn\'t support notifications.');
}
}
</script>
答案 0 :(得分:0)
好的,经过广泛的测试,必须是SSL问题。尽管多个网站都说“ Web Notifications”(请注意:不 Push Notifications)不需要SSL,但我在另一个stackoverflow问题中发现了这一点:
通知api仅在您出于安全考虑从域中的localhost,127.0.0.1或https运行时才起作用。它将服务工作者文件保存在您的浏览器中,这样,如果未通过SSL加密数据,则黑客或中间任何人都可以轻松地入侵该数据。因此,在实时网站中,您必须具有SSL证书,但是在本地计算机上,您可以使用任何服务器运行该证书。
该演示脚本确实可以在localhost(IIS Express)上运行,但不能在192.168.x.x上的IIS上运行
这非常令人沮丧,因为它可以在不使用SSL的Firefox和Edge中使用。
此外,用谷歌搜索这非常困难,因为看起来没有多少人使用Web Notications。大多数搜索结果会返回“推送通知”,这不是我正在使用的。
答案 1 :(得分:0)
你是对的。 Google Chrome浏览器希望您使用https://或localhost://来使推送通知生效。
如何绕过Chrome安全性:
对于本地开发,您可以使用unsafely-treat-insecure-origin-as-secure
选项启动Chrome。
open -a /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--args \
--user-data-dir=$HOME \
--unsafely-treat-insecure-origin-as-secure=http://your-insecure-domain.dev \