Pourquoi cette méthode chrome.browserAction.setIcon ne fonctionne-t-elle pas?

Je regarde la page de documentation et je ne peux pas comprendre ce qui est incorrect dans mon code:

chrome.browserAction.setIcon({ details.imageData = { "48": "Icons/iconfavorite48x.png", "64": "Icons/iconfavorite64x.png", "128": "Icons/iconfavorite128x.png" } }); 

Le documentaion dit:

Notez que 'details.imageData = foo' équivaut à 'details.imageData = {' 19 ': foo}'

Donc je suis extrêmement confus

Votre code est essentiellement une grande erreur de syntaxe. Un objet JavaScript littéral s'attend à être une liste de paires de key: value . Vous ne pouvez (et ne pas avoir besoin) d'affectations dans la partie key .

Donc, en réglant uniquement l'erreur de syntaxe, ce sera:

 // Still wrong: chrome.browserAction.setIcon({ imageData : { "48": "Icons/iconfavorite48x.png", "64": "Icons/iconfavorite64x.png", "128": "Icons/iconfavorite128x.png" } }); 

Cela échouera. imageData s'attend à des imageData binaires binaires de données de pixels obtenues, par exemple, à partir de <canvas> . Si vous souhaitez fournir des chemins, vous devez utiliser la propriété path :

 // Still wrong: chrome.browserAction.setIcon({ path : { "48": "Icons/iconfavorite48x.png", "64": "Icons/iconfavorite64x.png", "128": "Icons/iconfavorite128x.png" } }); 

Notez que vous ne pouvez fournir que des tailles qu'il attend. Si vous incluez un autre, il échouera. Citation des documents:

Si le nombre de pixels d'image qui correspondent à une unité d'espace d'écran égale à l'échelle, l'image avec l'échelle de taille * 19 sera sélectionnée. Initialement, les balances 1 et 2 seront prises en charge uniquement.

Une icône de taille normale est 19×19 pixels; Sur les écrans DPI élevés, Chrome peut afficher une icône 38×38.

Mise à jour: puisque Chrome a changé en conception de matériau en 53, cela s'attend maintenant à 16×16 et 32×32. Vous pouvez fournir des tailles anciennes et nouvelles sans erreurs.

Vous pouvez donc faire ceci:

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

Les images ne doivent pas avoir ces dimensions, elles seront mises à l'échelle si nécessaire; Mais il est évidemment mieux d'être exact.