'无法下载所有指定的图像,'当尝试在Chrome扩展上运行通知时

rdrgkggo  于 2023-09-28  发布在  Go
关注(0)|答案(3)|浏览(165)

脚本:

chrome.notifications.create(
    'name-for-notification',{   
    type: 'basic', 
    iconUrl: 'icon4.png',
    title: "This is a notification", 
    message: "hello there!" 
    });

每次我运行它,我得到的错误
Unchecked runtime.lastError while running notifications.create:无法下载所有指定的映像。
但这里的事情,“icon4.png”是在同一个文件作为我的脚本,背景。See for yourself.
我不知道为什么它不工作,图标在那里。我也试过这样做:

chrome.notifications.create(
        'name-for-notification',{   
        type: 'basic', 
        iconUrl: 'http://www.filehosting.org/file/details/671921/icon4.png',
        title: "This is a notification", 
        message: "hello there!" 
        });

但它仍然不起作用!
是的,我在清单中设置了通知权限。

z5btuh9x

z5btuh9x1#

URL必须相对于您的 * manifest.json *(第一个代码块)

您的问题是您没有向Chrome提供一个URL,该URL提供iconUrl作为相对于您的 * manifest.json * 的URL。iconUrl文档指出[重点是我的]:
URL可以是数据URL、blob URL或相对于此扩展名的.crx文件中的资源的URL
您似乎提供了一个相对于 background.js 脚本位置的URL,而不是相对于 manifest.json 的URL。这可以通过 * manifest.json * 与 * background.js * 不在同一个目录中来确定。如果你不提供你的 * manifest.json *,就不可能告诉你这个URL到底是什么。但是,它需要是相对于 * manifest.json * 文件的路径,类似于您引用 * bakground.js * 的方式。

不允许外部URL(第二个代码块)

您提供的iconUrl不允许。文档中明确列出了允许的URL类型(参见上面的引用)。实际上,限制是图标的数据必须完全从扩展内提供。你不能让Chrome从网络上获取图标的数据,只需要传递一个iconUrl的外部URL。这并不意味着您必须包含图标数据(例如:icon4.png)。你可以自己获取数据;将其转换为数据URL或blob URL;然后将其提供给Chrome。但是,数据必须已经存在于您的扩展中。

zwghvu4y

zwghvu4y2#

除了Makyen之外,这里还有一个我在扩展中使用过的例子。首先获取图像blob,然后将其转换为URL:

const response = await fetch('https://yourexternalimageurl.com/image.jpg');
const blob = await response.blob();

const url = URL.createObjectURL(blob);

chrome.notifications.create(null, {
    type: 'basic',
    iconUrl: url,
    title: 'Title',
    message: 'Message',
});
ssgvzors

ssgvzors3#

这是一个老问题,但这里是解决这个问题的最快方法。对扩展内的资源(如图标)使用chrome.runtime.getURL()函数。

chrome.notifications.create(
    'name-for-notification',{   
    type: 'basic',
    iconUrl: chrome.runtime.getURL('icon4.png'), // --HERE--
    title: "This is a notification", 
    message: "hello there!" 
    });

相关问题