Google chrome extension 检查Chrome extension是否以未打包模式安装

Google chrome extension 检查Chrome extension是否以未打包模式安装,google-chrome-extension,Google Chrome Extension,有没有办法检测我是否正在运行从.crx文件安装的扩展名,或者是通过“加载未打包的扩展名…”按钮加载的扩展名 我知道这种情况下的ID差异,但我不想依赖代码中的硬编码字符串。如果“从我的.crx文件安装”是指从Chrome Web Store安装,您只需检查扩展名manifest.json以了解更新url属性的值。CWS会在您上传扩展时添加它 如果您有一个自托管的.crx文件,请使用获取扩展名信息,并检查返回对象的installType。如果它说“development”,这意味着扩展是在开发人员模

有没有办法检测我是否正在运行从.crx文件安装的扩展名,或者是通过“加载未打包的扩展名…”按钮加载的扩展名

我知道这种情况下的ID差异,但我不想依赖代码中的硬编码字符串。

如果“从我的
.crx
文件安装”是指从Chrome Web Store安装,您只需检查扩展名
manifest.json
以了解
更新url
属性的值。CWS会在您上传扩展时添加它


如果您有一个自托管的
.crx
文件,请使用获取扩展名信息,并检查返回对象的
installType
。如果它说
“development”
,这意味着扩展是在开发人员模式下解包加载的<代码>“正常”表示它是从
.crx
文件安装的。

下面是一个代码示例,说明如何执行此操作:

function isDevMode() {
    return !('update_url' in chrome.runtime.getManifest());
}

扩展正在开发人员模式下运行(即解包),此时它的中不包含
update\u url
字段

这是因为未打包扩展的JSON清单文件不应包含
update\uURL
字段。此字段在输入时自动添加

例如,仅在开发期间出现的调试日志

const IS_DEV_MODE = !('update_url' in chrome.runtime.getManifest());

function debugLog(str) {
  if (IS_DEV_MODE) console.log(str);
}

debugLog('This only appears in developer mode');

一个更简单的方法是使用它。Chrome后来引入了更适合这个目的的
Chrome.management.getSelf
。虽然这在技术上是更好的解决方案,但我不喜欢它,因为
Chrome.management.getSelf
返回了一个承诺,这很烦人。检查
chrome.runtime.getManifest().update\u url
更容易操作。不仅承诺令人讨厌,而且chrome.management对内容脚本不可用,这是您可能需要了解“开发”模式的地方。但是chrome.runtime.getManifest()可用于内容脚本。但是,我不确定Edge add-ons store是否会在其中添加“update_url”。为了节省CPU时间,最好使用
if(IS_DEV_MODE)console.log(“YOUR_MSG”)everywhere@user25这种重构属于微观优化范畴,通常以可读性为代价,几乎不值得。事实上,.@Notflip在任何可用的地方都能工作。我还没有尝试过从背景脚本,但请给它一个尝试,让我们知道。