Notifications 通知图标不存在';不显示

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

我的应用程序有点问题,似乎通知没有显示图标。据我所知,Firefox操作系统中有一个带有相对路径的bug,但它列出的修复程序中没有一个对我有效。我已经在设备和模拟器中测试了它。 我正在开发的应用程序是打包和特权的,这会有问题吗

我用的是这样的东西:

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);
 });