Javascript:父级可以杀死子iframe,如果它被卡在无限循环中?

前端之家收集整理的这篇文章主要介绍了Javascript:父级可以杀死子iframe,如果它被卡在无限循环中?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个页面,其中包含带有外部内容的iframe.我不希望外部内容中的无限循环崩溃我的整个页面.有没有办法解决这个问题.

我试图在父级postMessages子iframe的情况下设置一些内容,如果子iframe没有响应太长时间,则父级更改iframes src,但这似乎不起作用.一旦iframe开始循环,父级的setTimeout函数就不再执行了.在这里查看我的代码(请注意,如果执行它会使选项卡崩溃,在执行之前打开控制台以查看日志记录):

有关如何解决这个问题的任何建议?

最佳答案
我遇到这种问题的经验是,除非您可以在将其提供给iframe(作为URL或通过srcdoc属性)之前访问外部代码,否则循环将完全中断任何JavaScript执行.

无论您实现什么类型的超时功能,都不​​会调用它,因为iframe代码执行会消耗100%的资源,直到浏览器报告崩溃.

你的选择是:

>在将代码添加到iframe之前自动清理代码,这证明是不切实际的,因为有无限循环无限循环,并且您将无法捕获所有代码.您必须编写一个扫描程序脚本,该脚本可以检测无限循环,同时在扫描代码过程中不会崩溃.
>使用像Google Caja这样的沙盒解决方案来清理代码.但是,如果没有大量配置,这将在结构上更改代码.
>如果应用程序具有创建虚拟环境和监视它们的功能,您可以执行iframe代码(假设在某种虚拟机上),检查进程是否锁定并使用该结果来确定您是否可以安全将iframe.src属性设置为代码的URL.这可能是唯一可以保证这些代码不会立即锁定的解决方案(但是,有很多方法可以在稍后的某个执行点上设置竞争条件,因此无法确定方式永远不会锁定浏览器).

简介:除非您能够在iframe中显示代码之前找到广泛测试代码方法,否则您无法保证iframe代码不会锁定浏览器选项卡.

猜你在找的JavaScript相关文章