const { app, session } = require('electron');
|
const _ = require('lodash');
|
const fs = require('fs');
|
const path = require('path');
|
const Log = require('ee-core/log');
|
|
/**
|
* 扩展插件 (electron自身对该功能并不完全支持,官方也不建议使用)
|
* @class
|
*/
|
class ChromeExtensionAddon {
|
|
constructor() {
|
}
|
|
/**
|
* 创建
|
*/
|
async create () {
|
Log.info('[addon:chromeExtension] load');
|
|
const extensionIds = this.getAllIds();
|
for (let i = 0; i < extensionIds.length; i++) {
|
await this.load(extensionIds[i]);
|
}
|
}
|
|
/**
|
* 获取扩展id列表(crx解压后的目录名,即是该扩展的id)
|
*/
|
getAllIds () {
|
const extendsionDir = this.getDirectory();
|
const ids = this.getDirs(extendsionDir);
|
|
return ids;
|
}
|
|
/**
|
* 扩展所在目录
|
*/
|
getDirectory () {
|
let extensionDirPath = '';
|
let variablePath = 'build'; // 打包前路径
|
if (app.isPackaged) {
|
variablePath = '..'; // 打包后路径
|
}
|
extensionDirPath = path.join(app.getAppPath(), variablePath, "extraResources", "chromeExtension");
|
|
return extensionDirPath;
|
}
|
|
/**
|
* 加载扩展
|
*/
|
async load (extensionId = '') {
|
if (_.isEmpty(extensionId)) {
|
return false
|
}
|
|
try {
|
const extensionPath = path.join(this.getDirectory(), extensionId);
|
Log.info('[addon:chromeExtension] extensionPath:', extensionPath);
|
await session.defaultSession.loadExtension(extensionPath, { allowFileAccess: true });
|
} catch (e) {
|
Log.info('[addon:chromeExtension] load extension error extensionId:%s, errorInfo:%s', extensionId, e.toString());
|
return false
|
}
|
|
return true
|
}
|
|
/**
|
* 获取目录下所有文件夹
|
*/
|
getDirs(dir) {
|
if (!dir) {
|
return [];
|
}
|
|
const components = [];
|
const files = fs.readdirSync(dir);
|
files.forEach(function(item, index) {
|
const stat = fs.lstatSync(dir + '/' + item);
|
if (stat.isDirectory() === true) {
|
components.push(item);
|
}
|
});
|
|
return components;
|
};
|
}
|
|
ChromeExtensionAddon.toString = () => '[class ChromeExtensionAddon]';
|
module.exports = ChromeExtensionAddon;
|