Chrome 扩展程序无法访问 chrome://extension-icon
Posted
技术标签:
【中文标题】Chrome 扩展程序无法访问 chrome://extension-icon【英文标题】:Chrome extension can't get access to chrome://extension-icon 【发布时间】:2016-11-07 23:58:18 【问题描述】:我正在尝试列出我的 Chrome 扩展程序中的其他扩展程序,并显示它们的图标。
另一个扩展程序(Zenmate ***)可以轻松显示其他人的图标。我发现它的清单中有management
权限。
"management"
添加到optional_permissions
并要求用户在单击后启用它。
之后,我可以列出扩展程序,但页面中的图标仍然无法访问。
当我将management
添加到permissions
部分时,一切正常。问题是我们不想在那里添加这个权限,因为如果更新版本要求更多权限,Chrome 会默认禁用扩展。
有没有办法以某种方式刷新页面中的权限,以使图标 URL 工作 (chrome://extension-icon/*
),就像在 ZenMate 中工作一样?
【问题讨论】:
【参考方案1】:如果您已经拥有chrome://favicon
权限,您可以使用它来显示扩展图标:
<img src="chrome://favicon/chrome-extension://igiofjhpmpihnifddepnpngfjhkfenbp/">
如果您最初没有chrome://favicon
权限,请尝试将其添加到optional_permissions
。如果它不起作用,请尝试添加到 permissions
,但首先测试它是否会在更新时禁用您的扩展。
可以指定其他图标大小(如果没有实际的大图标,则默认缩放 16x16px):
视网膜 2 倍 DPI:chrome://favicon/size/16@2x/chrome-extension://.......
48px:chrome://favicon/size/48/chrome-extension://.......
【讨论】:
【参考方案2】:我检查了是否可以使用 wOxxOm 的答案,并且大多数扩展程序没有更大的图标,我也无法请求 chrome://favicon/*
许可:Chrome 抛出异常:
运行 permissions.request 时未检查 runtime.lastError: 'chrome://favicon/*' 不是公认的权限。
所以我找到了一个简单而强大的解决方案:我只需关闭当前选项卡并创建一个新选项卡:
permissionsAchieved = function(allowed)
chrome.tabs.create( url: "<write current url here>" );
window.close();
,
完成。在新打开的选项卡中,图标显示正确。
但感谢您的建议!
【讨论】:
为什么是nor I can request chrome://favicon/* permission
?
@wOxxOm Chrome 抛出异常:“运行权限时未检查 runtime.lastError。请求:'chrome://favicon/*' 不是公认的权限。”
@wOxxOm 没有星号或斜杠。
从permissions
API 的角度来看,"chrome://favicon/"
是一个origin。
要(也许是迂腐地)拼出 Xan 所说的内容,您首先将源添加到清单中:"optional_permissions": ["chrome://favicon/"]
,然后在运行时请求该源:chrome.permissions.request( origins: ["chrome://favicon/"] , approved => console.log(approved))
。使用permissions:
而不是 origins:
在该调用中将触发“无法识别的权限”异常。以上是关于Chrome 扩展程序无法访问 chrome://extension-icon的主要内容,如果未能解决你的问题,请参考以下文章