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://igiofjhpmpihnifddep‌​npngfjhkfenbp/">

如果您最初没有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 =&gt; console.log(approved))。使用permissions:而不是 origins: 在该调用中将触发“无法识别的权限”异常。

以上是关于Chrome 扩展程序无法访问 chrome://extension-icon的主要内容,如果未能解决你的问题,请参考以下文章

Chrome扩展程序getUrl无法在注入文件中运行

Chrome扩展程序的chrome对象属性未定义

Chrome浏览器之 Postman 安装

关于Chrome 67 以后版本无法离线安装扩展的解决方法

如何将 blob 从 Chrome 扩展程序传递到 Chrome 应用程序

如何安装chrome扩展,以json-handle为例