javascript - 动态创建函数的源映射

标签 javascript

JavaScript 允许您在运行时使用 new Function(...) 或 eval 创建新函数。以这种方式创建的函数是否可以设置源映射之类的东西?也就是说,设置据称从中加载它的源文件的名称,以及不同的源代码行号。

如果没有通用的解决方案,那么可能会有针对特定 JavaScript 引擎的特定解决方案。

最佳答案

对于评估代码,您可以简单地添加:

//# sourceMappingURL=<url>
//# sourceURL=<filename.js>

到您正在评估的代码的底部。对于 sourceMappingURL,您将发送 data url ,因为您自然不会在某处托管现有源 map ,您将动态生成它。

将您的原始源放在源映射中的 sourcesContent 字段中,将源映射中的 file 字段设置为您在 sourceURL 中设置的任何内容,这样就可以了去。

我目前试图让它在函数构造函数中工作的尝试失败了,这是一种耻辱 - 在这种情况下,在 Edge 和 Chrome 中,原始来源都被正确列出,但行号信息似乎被破坏了(指令指针总是指向最后一行)。我目前正在调查此事。但是,源映射规范确实暗示了包含源映射的函数构造函数:

If the generated code is being evaluated as a string with the eval() function or via new Function(), then the source origin will be the page’s origin.

这让我相信要么我在做一些愚蠢的事情,要么这个功能没有得到很好的支持。

关于javascript - 动态创建函数的源映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49463047/

相关文章:

javascript - 访问 canvas.ToBlob() 异步函数之外的 blob 值

javascript - 正则表达式从字符串中捕获域名,包括特定顶级域名的电子邮件地址

javascript - 如果 child 悬停在 mouseover 事件上的 jQuery 再次触发

javascript - 对对象数组进行排序时出错无法分配给对象 '2' 的只读属性 '[object Array]'

javascript - 移动框架

javascript - Node.JS-R,Python 繁重计算识别回调何时返回并存储该结果

javascript - 一些事件应该只显示在日 View fullcalendar

javascript - 如何使用 JavaScript API 执行服务器端 Cosmos DB Patch?

javascript - 在VS2010中构建ASP.NET项目时可以使用YUI压缩吗

javascript - ajax 加载指示器在中间停止