代码之家  ›  专栏  ›  技术社区  ›  ianmayo

Javascript应用程序中是否有编写脚本扩展的先例?[闭门]

  •  0
  • ianmayo  · 技术社区  · 7 年前

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

    在JS域中提供这种功能有没有先例?

    1. 是的,我知道JS应用程序是脚本编写的,但我是从用户的角度来看的: 用户希望使用一些自定义JS脚本扩展JS应用程序(单页应用程序、electron应用程序、NodeJS服务),从而有可能访问应用程序的对象模型。
    2. 是的,JS应用程序可以通过在运行时包含额外的包来扩展,但是前面的示例包括执行脚本的IDE类型环境。

    有人能举个例子吗?显然,安全性是一个问题(例如,因为应用程序可能具有用户脚本不应具有的特权文件访问权限)

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

    https://code.visualstudio.com/docs/extensions/overview

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   11AND2    7 年前

    电子方面的例子:

    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>

    主要过程----

    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;
    })