Javascript应用程序中是否有脚本扩展的先例?

时间:2018-06-06 09:01:06

标签: javascript scripting ide electron

运行用户脚本的能力是高级用户的强大扩展,如VBA(适用于MS Office)或EASE脚本(适用于Eclipse)中所提供。

在JS域中提供此类功能是否有先例?

  1. 是的,我知道JS应用程序是脚本化的,但我从用户的角度来看它: 用户希望使用一些自定义JS脚本扩展JS应用程序(单页面应用程序,电子应用程序,NodeJS服务),可能会访问应用程序的对象模型。
  2. 是的,可以通过在运行时包含其他软件包来扩展JS应用程序,但前面的示例包括执行脚本编写的IDE类型环境。
  3. 有人可以指出这方面的一个例子吗?显然,安全性是一个问题(例如,因为应用程序可能具有用户脚本不应具有的特权文件访问权限)

    注1:我知道技术上它是在VS Code [1]中提供的,但那已经是一个IDE了,所以这似乎不是一个很好的例子。

    注2:我现在找到了一个提供IDE功能的组件[2],但是没有找到它用于JS应用程序的“宏编辑器”的例子。

    [1]。 https://code.visualstudio.com/docs/extensions/overview

    [2]。 https://ace.c9.io/

1 个答案:

答案 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;
&#13;
&#13;

主要流程----

&#13;
&#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;
&#13;
&#13;