mirror of
https://gitee.com/dromara/electron-egg.git
synced 2026-05-14 19:52:10 +08:00
88 lines
1.9 KiB
JavaScript
88 lines
1.9 KiB
JavaScript
'use strict';
|
||
|
||
const { app, session } = require('electron');
|
||
const _ = require('lodash');
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
/**
|
||
* chrome扩展模块
|
||
*/
|
||
module.exports = {
|
||
|
||
/**
|
||
* 安装
|
||
*/
|
||
async install () {
|
||
console.log('[preload] load chrome extension module');
|
||
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 = 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);
|
||
console.log('[chromeExtension] [load] extensionPath:', extensionPath);
|
||
await session.defaultSession.loadExtension(extensionPath, { allowFileAccess: true });
|
||
} catch (e) {
|
||
console.log('[chromeExtension] [load] load extension error extensionId:%s, errorInfo:%s', extensionId, e.toString());
|
||
return false
|
||
}
|
||
|
||
return true
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 获取目录下所有文件夹
|
||
*/
|
||
function 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;
|
||
};
|