I'm looking at the documentation page我无法弄清楚代码中的错误:
chrome.browserAction.setIcon({
details.imageData = {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
文件说:
请注意' details.imageData = foo'相当于 ' details.imageData = {' 19':foo}'
所以我非常困惑
答案 0 :(得分:28)
您的代码基本上是一个很大的语法错误。 JavaScript对象文字期望是对key: value
的列表。您无法(并且不需要)key
部分中的任何作业。
因此,修复仅语法错误,它将是:
// Still wrong:
chrome.browserAction.setIcon({
imageData : {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
这会失败。 imageData
期望获得像素数据的二进制blob,例如,来自<canvas>
。如果要提供路径,则需要使用path
属性:
// Still wrong:
chrome.browserAction.setIcon({
path : {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
请注意,您只能提供所需的尺寸。如果包含任何其他内容,则会失败。引用文档:
如果适合一个屏幕空间单位的图像像素数等于比例,则将选择尺寸比例为* 19的图像。最初只支持第1和第2级。
正常大小的图标是19x19像素;在高DPI屏幕上,Chrome可能会显示38x38图标。
更新:由于Chrome已经在53中切换到Material Design,现在分别需要16x16和32x32。您可以毫无错误地提供旧尺寸和新尺寸。
所以你可以这样做:
// Correct
chrome.browserAction.setIcon({
path : {
"19": "Icons/iconfavorite19x.png",
"38": "Icons/iconfavorite38x.png"
}
});
// Also correct
chrome.browserAction.setIcon({
path : {
"19": "Icons/iconfavorite19x.png"
}
});
// Also correct
chrome.browserAction.setIcon({
path : "Icons/iconfavorite19x.png"
});
图像不具有具有这些尺寸,如有必要,它们将被缩放;但它确实更准确。
答案 1 :(得分:1)
对于清单版本 3,您必须使用 chrome.action.setIcon
而不是 chrome.browserAction.setIcon
。
例如,单独文件夹中的灰色图像:
chrome.action.setIcon({
path: {
"16": "/icons/gray/icon16.png",
"19": "/icons/gray/icon19.png",
"32": "/icons/gray/icon32.png",
"48": "/icons/gray/icon48.png",
"128": "/icons/gray/icon128.png"
}
});
或者,如果不是问题的一部分,也可以通过 setBadgeText 解决:
state
是我自己的变量。
chrome.action.setBadgeText({
text: (state ? 'off' : '')
});
chrome.action.setBadgeBackgroundColor({
color: '#2f2f2f'
});