在iframe中断JS

时间:2012-05-16 17:10:58

标签: javascript iframe qunit

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

如果它正在等待AJAX​​调用,或者异步测试永远不会回来,那么它的效果很好。但是,setTimeout函数将始终在当前执行线程之后运行,因此如果测试进入无限循环,或者只是在标准执行中花费太长时间,它将不会真正停止它,而只是坐着等待转弯而不打断它。 有没有办法取消子<iframe>(在同一个域中)的代码执行,即使它被卡在循环中?

1 个答案:

答案 0 :(得分:0)

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

在您的父页面

<script> 

function startTimer(duration) {     
    setTimeout("timedOut()",duration);
} 

function timedOut() {
       // handle time out
}

</script>  

<iframe id=myFrame></iframe> 

在你的IFrame中

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

每个页面都在不同的线程上运行,因此应该为你工作,但有些事情会锁定整个浏览器系统(无限循环/无限递归),你必须让任务管理员参与重新启动浏览器,但它应该涵盖大部分案例。