解析JavaScript函数字符串

解析JavaScript函数字符串,javascript,json,web-worker,Javascript,Json,Web Worker,首先,我知道将JavaScript函数存储在JSON字符串中存在安全风险,但这里并不是这样 现在我正在使用web workers和blob字符串开发JS多线程模型。但是,我相信您知道,您不能在web workers中使用自定义对象或来自上述自定义对象的原型,因此我开发了一个系统,用于将自定义对象与函数序列化为可在web worker中使用的匿名对象,但在序列化对象上调用JSON.parse时,我遇到语法错误反对 序列化函数: AjaxHandler.prototype.getEmbedded =

首先,我知道将JavaScript函数存储在JSON字符串中存在安全风险,但这里并不是这样

现在我正在使用web workers和blob字符串开发JS多线程模型。但是,我相信您知道,您不能在web workers中使用自定义对象或来自上述自定义对象的原型,因此我开发了一个系统,用于将自定义对象与函数序列化为可在web worker中使用的匿名对象,但在序列化对象上调用
JSON.parse
时,我遇到语法错误反对

序列化函数:

AjaxHandler.prototype.getEmbedded = function(stringify) {
    "use strict";

    let embMembers = this.metaData.embeddedMembers; // an array of function names to add
    let embeddedObj = {};
    let stringifyArray = stringify ? new Array(embMembers.length) : [];

    if (stringify) {
        for (let i = 0; i < embMembers.length; i++) {
            stringifyArray[i] = ('"' + embMembers[i] + '":"' + AjaxHandler.prototype[embMembers[i]].toString().replace(/[\n\r]+/gi, '').replace(/[\t]+/gi, '')).replace(/\/\*\*\/this.\/\*\*\//gi, '') + '"';
        }
    } else {
        for (let mem of embMembers) {
            embeddedObj[mem] = AjaxHandler.prototype[mem];
        }
    }

    if (stringify) {
        return ("{" + stringifyArray.join(",") + "}");
    } else {
        return embeddedObj;
    }
};
它抛出一个错误(未捕获的SyntaxError:意外字符串),如代码中所述

有没有办法解析出包含函数的对象

注意事项:

AjaxHandler.prototype.getEmbedded = function(stringify) {
    "use strict";

    let embMembers = this.metaData.embeddedMembers; // an array of function names to add
    let embeddedObj = {};
    let stringifyArray = stringify ? new Array(embMembers.length) : [];

    if (stringify) {
        for (let i = 0; i < embMembers.length; i++) {
            stringifyArray[i] = ('"' + embMembers[i] + '":"' + AjaxHandler.prototype[embMembers[i]].toString().replace(/[\n\r]+/gi, '').replace(/[\t]+/gi, '')).replace(/\/\*\*\/this.\/\*\*\//gi, '') + '"';
        }
    } else {
        for (let mem of embMembers) {
            embeddedObj[mem] = AjaxHandler.prototype[mem];
        }
    }

    if (stringify) {
        return ("{" + stringifyArray.join(",") + "}");
    } else {
        return embeddedObj;
    }
};
没有向客户端发送或从客户端发送JSON数据,因此我认为在JSON中存储和发送函数不存在安全风险


我已经研究了之前关于这个问题的问题,我发现除了“不要这样做,这是一个安全风险”之外,没有一个线索提供任何有效的解决方案。

你有没有一个字符串解析失败的例子?为什么你要构建自己的JSON字符串(而不是使用JSON.stringify)?“所有嵌入的函数在语法上都是正确的“这是什么意思?如何嵌入它们?当然,JSON中不能直接包含函数。好吧,看看你的代码,你似乎想把函数的源代码放到一个字符串中。这应该行得通,但最好使用Json.stringify而不是你的特殊字符replace voodo(例如,它似乎不处理引号)。@guest271314我不认为这与此有什么关系。我已经有了一个系统,可以在没有其他文件的情况下使用工人,这不是我要问的。我添加了关于我在哪里使用这些函数的信息,纯粹是为了上下文。