我计划使用 AJAX 加载 JS 文件,然后评估它们以执行代码。但我担心使用 eval。为了了解 jQuery 如何实现 getScript 方法,我浏览了它的源代码并发现了这一点:
rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/;
jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" )
.replace( rcleanScript, "/*$0*/" ) );
globalEval 是一种在全局(窗口)上下文中评估脚本并注意跨浏览器兼容性的方法。但我不明白替换部分。从名称来看,rcleanScript 似乎用于清理脚本,以便安全地执行它。但我不明白它是如何工作的。
有人能解释一下吗?
编辑:我知道它正在用/$0/替换某些 CDATA 部分。但这如何保证它的安全呢?从本质上讲,在不替换 CDATA 部分的情况下执行脚本会是不安全的吗?
最佳答案
基本上,rcleanScript
是一个正则表达式,用于查找可能有害的代码部分,"/*$0*/"
表示替换 rcleanScript
使用 /**/
查找注释部分。
关于jquery - 在使用 eval 执行动态加载的 JavaScript 文件之前,jQuery 如何清理它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6258993/