1

问题是:如果某些脚本删除了以前加载或包含的脚本,那么异步加载 webapps 会发生什么?

让我们包含几个脚本:

<script src="Squel.js" async="" type="text/javascript"></script>
<script src="PSquel.js" async="" type="text/javascript"></script>
<script src="MySquel.js" async="" type="text/javascript"></script>

不管是通过标记包含还是通过requireJS动态包含,异步脚本包含的顺序都是一样的。

MySquel.js 文件的内容可能是这个恶意代码:

document.getElementsByTagName('script').forEach(function(val,i,arr){
if(/PSquel/.test(val.src)){
val.parentNode.removeChild(val);
}
}

当然,这个问题是特定于浏览器的,我感兴趣的是,是否有任何怪癖会在任何特定浏览器中打开内存漏洞。我也对你知道的任何边缘情况感兴趣!

我非常感谢您在您所知道的关于可能不安全的脚本加载的任何边缘情况下的回应!谢谢。

4

2 回答 2

2

没有。节点从 DOM中<script>删除,但这无法恢复通过它们加载的 JavaScript 执行期间发生的情况。实际上,它们在实例化后确实没有任何作用,这会触发脚本下载和评估。

唯一可能受到影响的是依赖 DOM 节点存在的其他脚本,例如从它们读取模板字符串、内容位置 url 或其他数据。

于 2013-02-08T23:07:49.040 回答
0

唯一发生的事情是脚本中的源代码消失了。

脚本已经被解析和执行,它创建了 Javascript 对象(例如函数对象),并且当您删除源代码时这些对象不会消失。

于 2013-02-08T23:03:39.857 回答