中断 iframe 中的 JS

Interrupt JS in an iframe

本文关键字:JS 中的 iframe 中断      更新时间:2023-09-26

我正在创建一个基于 QUnit 的自动化测试框架,我希望能够在测试时间过长(超时(时终止测试。现在,我目前的实现非常简单:在测试开始时,我设置了一个计时器并等待。如果测试到那时尚未完成,我会将其标记为失败,然后重新加载正在运行测试<iframe>

如果它正在等待 AJAX 调用,或者异步测试永远不会返回,这非常有用。但是,setTimeout函数将始终在当前执行线程之后运行,因此,如果测试进入无限循环,或者只是在其标准执行中花费了太长时间,它不会真正停止它,而只是坐下来等待轮到它而不中断它。有没有办法取消子<iframe>(在同一域中(中代码的执行,即使它卡在循环中?

在父窗口中定义计时器 - 当 IFrame 加载时,让它在父窗口中启动计时器 - 当计时器用完时,让父窗口重新加载 IFrame。

在父页面中

<script> 
function startTimer(duration) {     
    setTimeout("timedOut()",duration);
} 
function timedOut() {
       // handle time out
}
</script>  
<iframe id=myFrame></iframe> 

在你的伊弗拉梅

<script> 
    parent.startTimer(duration);
</script>

每个页面在不同的线程上运行,所以它应该适合你,但有些事情会锁定整个浏览器系统(无限循环/无限递归(,你必须让任务管理器参与重启浏览器,但它应该涵盖大部分情况。