我认为唯一的方法是非常重量级的,它是您自己基本上解释JS或用自定义实现(例如注入变量和解析内容)替换Functions构造。 这种方法将很难实施。
由于变量document
和top
无法删除或覆盖,因此无法删除变量。
@ io4 ,使用AST重写当然可以在运行时替换Function,eval等,这也不是很困难的。 但是,由于在“编译时”确实要重写每个函数调用,而在运行时则要重写函数,因为函数调用必须经过一层间接,这确实会严重打击性能。
由于此问题最近没有活动,因此已被自动标记为陈旧。 如果没有其他活动发生,它将关闭。 感谢你的贡献。
请不要关闭,这是一个相关的问题。
我正在考虑使用Web Worker使vm2在浏览器中工作。 我会试一试。
也许您也可以将其放入沙盒iframe中。 这样,即使它逃脱了,它仍然仅限于框架并且无法导航顶级浏览上下文。
状态是我们不能使用网络工作者,因为他们不与主机共享内存。 我正在测试沙盒iframe,但那里也没有成功。 如果没有allow-same-origin
选项,vm2甚至无法启动。 启用该选项后,我可以访问顶级窗口。 但我没有放弃:)
它给你什么样的错误? 是否需要访问变量? 是否缺少图书馆? 通过在iframe之间交换消息可以检索到任何数据吗?
我确实尝试使用与realms-shim相同的技巧来修复对窗口的访问。
可以在这里找到一个实现: https :
缺点是虚拟机中的所有内容均以严格模式运行。
我不知道一种观察window
或window.top
的方法,该方法可以在发生某些事情之前抛出。
你好
我需要将vm2.js作为模块导入
有人可以帮忙吗? 谢谢
你好
我需要将vm2.js作为模块导入
有人可以帮忙吗? 谢谢
作为模块工作:在文件末尾添加module.exports = vm2;
。
最有用的评论
我正在考虑使用Web Worker使vm2在浏览器中工作。 我会试一试。