为什么这个 chrome.browserAction.setIcon 方法不起作用?
why is this chrome.browserAction.setIcon method not working?
I'm looking at the documentation page 我不知道我的代码有什么问题:
chrome.browserAction.setIcon({
details.imageData = {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
文档说:
Note that 'details.imageData = foo' is equivalent to
'details.imageData = {'19': foo}'
所以我很困惑
你的代码基本上是一个很大的语法错误。 JavaScript 对象字面量应该是一个 key: value
对列表。您不能(也不需要)在 key
部分中进行任何分配。
因此,仅修复语法错误,它将是:
// Still wrong:
chrome.browserAction.setIcon({
imageData : {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
这会失败。 imageData
期望从 <canvas>
获得像素数据的二进制 blob。如果要提供路径,则需要使用 path
属性:
// Still wrong:
chrome.browserAction.setIcon({
path : {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
请注意,您只能提供它期望的尺寸。如果您包含任何其他内容,它将失败。引用文档:
If the number of image pixels that fit into one screen space unit equals scale, then image with size scale * 19 will be selected. Initially only scales 1 and 2 will be supported.
正常大小的图标是 19x19 像素;在高 DPI 屏幕上 Chrome 可能会显示 38x38 图标。
更新:由于 Chrome 已切换到 53 中的 Material 设计,现在分别需要 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"
});
图像没有这些尺寸,必要时会缩放;但当然最好是准确的。
对于 清单版本 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'
});
I'm looking at the documentation page 我不知道我的代码有什么问题:
chrome.browserAction.setIcon({
details.imageData = {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
文档说:
Note that 'details.imageData = foo' is equivalent to 'details.imageData = {'19': foo}'
所以我很困惑
你的代码基本上是一个很大的语法错误。 JavaScript 对象字面量应该是一个 key: value
对列表。您不能(也不需要)在 key
部分中进行任何分配。
因此,仅修复语法错误,它将是:
// Still wrong:
chrome.browserAction.setIcon({
imageData : {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
这会失败。 imageData
期望从 <canvas>
获得像素数据的二进制 blob。如果要提供路径,则需要使用 path
属性:
// Still wrong:
chrome.browserAction.setIcon({
path : {
"48": "Icons/iconfavorite48x.png",
"64": "Icons/iconfavorite64x.png",
"128": "Icons/iconfavorite128x.png"
}
});
请注意,您只能提供它期望的尺寸。如果您包含任何其他内容,它将失败。引用文档:
If the number of image pixels that fit into one screen space unit equals scale, then image with size scale * 19 will be selected. Initially only scales 1 and 2 will be supported.
正常大小的图标是 19x19 像素;在高 DPI 屏幕上 Chrome 可能会显示 38x38 图标。
更新:由于 Chrome 已切换到 53 中的 Material 设计,现在分别需要 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"
});
图像没有这些尺寸,必要时会缩放;但当然最好是准确的。
对于 清单版本 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'
});