运行用户脚本的能力是高级用户的强大扩展,如VBA(适用于MS Office)或EASE脚本(适用于Eclipse)中所提供。
在JS域中提供此类功能是否有先例?
有人可以指出这方面的一个例子吗?显然,安全性是一个问题(例如,因为应用程序可能具有用户脚本不应具有的特权文件访问权限)
注1:我知道技术上它是在VS Code [1]中提供的,但那已经是一个IDE了,所以这似乎不是一个很好的例子。
注2:我现在找到了一个提供IDE功能的组件[2],但是没有找到它用于JS应用程序的“宏编辑器”的例子。
[1]。 https://code.visualstudio.com/docs/extensions/overview
[2]。 https://ace.c9.io/
答案 0 :(得分:1)
我能想到的一种方法是使用eval()。在你的情况下,你可以忽略通常的eval是邪恶的谈话,因为你想让用户访问你的应用程序。
电子示例:
渲染过程----
const {ipcRenderer} = require('electron');
var _o = document.getElementsByTagName('button');
_o[0].onclick = function(evt) {
var js_raw = document.getElementById('js_raw').value;
ipcRenderer.send('execute_user_js', js_raw);
}

<input id="js_raw"></input><button>Execute User JS</button>
&#13;
主要流程----
const {ipcMain} = require('electron');
//public methods for users to call
var my_obj_vusers = {
public: function() {console.log("i am public function");}
};
ipcMain.on('execute_user_js', (event, arg) => {
//note: in production I would ensure that the user code does not include code patterns I do not want the user to execute (eg with regex)
eval(arg); //user can also access public objects eg. my_obj_vusers.public()
return;
})
&#13;