最近又鼓捣起两年前作的一个chrome扩展,想要跑起来却发现报错了,看了下console,首先是indexedDB报错,说是window.webkitIndexedDB
已经被废弃了,用window.indexedDB
代替后,就没再报错了,看来我这chrome 46
的indexedDB api
只是改了个更通用的名称,仍是比较厚道的,因此,这里就不详述了。
真正出问题的是桌面通知,chrome 46
给我报的错是window.webkitNotifications
不是个对象,这可坑爹了都没提示我要换成什么。立刻百度谷歌一块儿上,排名前列的大部分都是我当年就看到的老资料,好不容易找到最新的资料,测试可用,下面介绍一下新版的window.Notifications
与老版的window.webkitNotifications
有什么区别。git
从chrome 22
开始,webkitNotifications
就被取消了,只能使用标准化的Notification
。github
不管是新版仍是老版的notification api
,都是须要获得用户的批准,才能获取到相应的api权限。
老版获取权限的方式是这样的:web
经过checkPermission()方法检查当前是否已得到权限。chrome
若还没有得到权限,则调用requestPermission()方法向用户请求权限。api
而新版取消了checkPermission()方法,直接经过requestPermission()方法完成查询权限及获取权限这两项任务,具体代码以下:浏览器
Notification.requestPermission(function(status){ //status值有三种:default/granted/denied if(Notification.permission !== status){ Notification.permission = status; } });
重点来了,老版是这样的:测试
利用window.webkitNotifications.createNotification()或window.webkitNotifications.createHTMLNotification()方法来建立一个Notification对象。code
调用刚刚建立的Notification对象的show()方法来进行显示。对象
新版则又精简了一点,直接new一个Notification对象,在new的时候把桌面通知的参数都传进去,这桌面通知就会立刻显示,具体代码看下方:事件
var options={ dir: "ltr", //控制方向,听说目前浏览器还不支持 lang: "utf-8", icon: "http://ihuster.com/static/avatar/m_default.png", body: "你好呀,欢迎留言交流呀" }; var n = new Notification("hello word!", options);
另外新版还有一点不一样的是,提供了4个事件:
onshow()
onclick()
onclose()
onerror()
参考文章: