Javascript 如果某些脚本删除了以前加载或包含的脚本,那么在异步加载webapps时会发生什么情况?
问题是: 如果某些脚本删除了以前加载或包含的脚本,那么在异步加载webapps时会发生什么情况 让我们包含几个脚本:Javascript 如果某些脚本删除了以前加载或包含的脚本,那么在异步加载webapps时会发生什么情况?,javascript,json,cross-browser,security,browser-security,Javascript,Json,Cross Browser,Security,Browser Security,问题是: 如果某些脚本删除了以前加载或包含的脚本,那么在异步加载webapps时会发生什么情况 让我们包含几个脚本: <script src="Squel.js" async="" type="text/javascript"></script> <script src="PSquel.js" async="" type="text/javascript"></script> <script src="MySquel.js" async=""
<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>
当然,这个问题是非常特定于浏览器的,但我感兴趣的是,在任何特定的浏览器中,是否有任何怪癖会打开内存漏洞。
我也对你知道的任何边缘案例感兴趣
我非常感谢您在任何您知道的关于可能不安全的脚本加载的边缘案例中的响应!
谢谢 唯一发生的事情是脚本中的源代码消失了 脚本已经被解析和执行,这将创建Javascript对象(例如函数对象),当您删除源代码时,这些对象不会消失。什么都没有。
节点将从DOM中删除,但这无法恢复通过它们加载的JavaScript执行过程中发生的情况。实际上,它们在实例化之后没有任何用途,这会触发脚本下载和评估
唯一可能受到影响的是依赖于DOM节点存在的其他脚本,例如从中读取模板字符串、内容位置URL或其他数据。当然,我对是否加载domContent以及对脚本的访问是否可行不感兴趣。我只对理论上的可能性感兴趣,或者在你知道的任何一种浏览器中,这种可能性都是不安全的!您的“恶意”代码仅从DOM中删除脚本标记,脚本本身仍在内存中,并且工作方式与未发生任何事件一样。如果较早的脚本之一从DOM中删除较新的标记,这会阻止浏览器加载较新的脚本吗?@Barmar较早的脚本无法看到任何较新的脚本,因为它们还没有被解析,所以它也不能删除任何后面的脚本标记。如果我们相信Bergi的“afaik”(为什么我们不相信?),那么后一个脚本的加载就不能中止,即使一个超时函数会删除标记也是如此?如果加载时删除了脚本的标记,那么异步加载脚本是否会失败?如果这样,则不能中止脚本加载(无论是使用
async
属性还是仅动态插入)。这是JSONP的一个相当大的问题。
document.getElementsByTagName('script').forEach(function(val,i,arr){
if(/PSquel/.test(val.src)){
val.parentNode.removeChild(val);
}
}