| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- 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;
|