当manifest.json
以多种尺寸指定默认图标时,我无法让browser.browserAction.setIcon
在Microsoft Edge中工作:
manifest.json
{
"manifest_version": 2,
"name": "test",
"version": "0.0.1",
"author": "John Doe",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_icon": {
"19": "icon.png",
"38": "icon2.png"
}
}
}
background.js
setInterval(function() {
browser.browserAction.setIcon({
path: "testimage.png"
});
}, 2000);
没有记录错误,代码被执行,但图标没有改变。同样的代码在Chrome中运行良好。
将manifest.json更改为
"browser_action": {
"default_icon": "icon.png"
}
修复了这个问题,但如果我需要使用多个默认图标怎么办?
编辑:
不幸的是,即使是"default_icon": "icon.png"
也不可用,尽管Edge很高兴地加载了扩展,但当将其提交到商店时,的验证失败了
验证失败:无效类型:字符串(预期对象)架构位置:/properties/browser_action/allOf/0/properties/default_icon/type清单位置:/browser_action/default_icon扩展清单验证失败:extension\manifest.json
MDN确实这么说:https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/browser_action#Browser_compatibility
'default_icon'必须是具有显式大小的对象。
最后我得出的结论是,Edge不喜欢浏览器动作图标路径的string
值,无论是在manifest.json
还是在browserAction.setIcon
中,它都会无声地失败,不会产生任何错误。
使其工作的一种方法是始终在manifest.json
和每个browserAction.setIcon
调用中设置显式大小,即使不同的大小都指向同一个图像。
manifest.json
{
"manifest_version": 2,
"name": "test",
"version": "0.0.1",
"author": "John Doe",
"background": {
"scripts": ["background.js"],
"persistent": false
},
"browser_action": {
"default_icon": {
"19": "icon.png",
"38": "icon2.png"
}
}
}
background.js
browser.browserAction.setIcon({
path: {
"19": "testimage.png",
"38": "testimage.png"
});