Notifications 通知图标不存在';不显示
我的应用程序有点问题,似乎通知没有显示图标。据我所知,Firefox操作系统中有一个带有相对路径的bug,但它列出的修复程序中没有一个对我有效。我已经在设备和模拟器中测试了它。 我正在开发的应用程序是打包和特权的,这会有问题吗 我用的是这样的东西:Notifications 通知图标不存在';不显示,notifications,firefox-os,base64,url,png,canvas,Notifications,Firefox Os,Base64,Url,Png,Canvas,我的应用程序有点问题,似乎通知没有显示图标。据我所知,Firefox操作系统中有一个带有相对路径的bug,但它列出的修复程序中没有一个对我有效。我已经在设备和模拟器中测试了它。 我正在开发的应用程序是打包和特权的,这会有问题吗 我用的是这样的东西: function showNotification(title,text) { var icon = window.location.origin + "/icon.png"; new Notification(title, {bod
function showNotification(title,text) {
var icon = window.location.origin + "/icon.png";
new Notification(title, {body: text}, {icon: icon});
}
该应用程序与Firefox OS 1.2及更高版本兼容
Firefox OS的一个特殊问题是,你可以传递一个图标的路径以在通知中使用,但如果应用程序打包,你就不能使用相对路径,如/my_icon.png
。您也不能使用window.location.origin+“/my_icon.png”
,因为window.location.origin
在打包应用程序中是空的
manifest origin字段解决了这一问题,但它仅在Firefox OS 1.1+
中可用
看
然而,一个可能的解决方案是将图像编码到打包应用程序中的一个文件中。您可以从外部资源接收base64
编码的图像,并将其直接传递给服务器
示例编码器使用:
信息:
let message = {
title: 'Batman message',
text: 'Robin pick my up at my cave'
};
图标URL:
const iconURL = '/assets/icons/batman_icon128x128.png';
用法示例:
// Promise
createIcon(iconURL).then((dataURL) => {
// Gecko >= 22
if(typeof window.Notification === 'function') {
new Notification(message.title, {
body: message.text,
icon: dataURL
});
}
// Gecko < 22
else if (typeof navigator.mozSetMessageHandler === 'function') {
let notification = navigator.mozNotification.createNotification(
message.title,
message.text,
dataURL
);
notification.show();
}
}).catch(function(error) {
// Rejection
console.warn(error);
});
//承诺
createIcon(iconURL)。然后((dataURL)=>{
//壁虎>=22
如果(窗口类型通知==='函数'){
新通知(message.title{
正文:message.text,
图标:dataURL
});
}
//壁虎<22
else if(typeof navigator.mozSetMessageHandler==='function'){
让notification=navigator.mozNotification.createNotification(
message.title,
message.text,
数据URL
);
notification.show();
}
}).catch(函数(错误){
//拒绝
控制台。警告(错误);
});
从mdn复制文本时,您错过了+
。由于他正在开发1.2,使用清单应该可以很好地工作。解决方案的其余部分仅对支持FirefoxOS有意义
// Promise
createIcon(iconURL).then((dataURL) => {
// Gecko >= 22
if(typeof window.Notification === 'function') {
new Notification(message.title, {
body: message.text,
icon: dataURL
});
}
// Gecko < 22
else if (typeof navigator.mozSetMessageHandler === 'function') {
let notification = navigator.mozNotification.createNotification(
message.title,
message.text,
dataURL
);
notification.show();
}
}).catch(function(error) {
// Rejection
console.warn(error);
});