澄清:父框架是第X页,子框架位于第X页。 问题是行为缓慢,并且从未达到清除间隔的代码部分。
我有一个父母和chilframe。在父级中创建了一个对象,然后我在子框架中使用了setTimeout()来调用父对象,将其自身添加到父对象中的内部集合。
由于浏览器响应速度很慢,代码似乎没有按预期运行。有关这个问题的任何想法吗?
父框架
<script type="text/javascript">
var Cert = new Parent();
</script>
子框架
<script type="text/javascript">
var c;
var id = setInterval("Create()", 1000);
function Create()
{
if (parent.Cert != null && parent.Cert != undefined)
{
c = new Child(parent.Cert, 1, null);
clearInterval(id);
}
}
</script>
答案 0 :(得分:2)
不要将字符串传递给setTimeout/Interval
。相反,将它传递给函数引用!
var id = setInterval(function () {
Create();
}, 1000);
根据您在此处提供的代码,parent
为window
。这是你想要的吗?这里似乎缺少一些相关的代码......
至于减速,或许功能间隔太短,或者永远不会满足? Child
类的构造函数中也可能存在错误,这样就不会调用clearInterval
行。你可以考虑在那里放置一个限制器,或者将实例化包装在try...catch
块中,或者将clearInterval
语句移到你正在创建对象的行上方。
或者,做所有这些事情:
var c = null;
var id = setInterval(function () {
Create();
}, 1000);
var itr = 0;
function Create() {
// if it has looped more than 20 times, forget it
if (itr > 20) {
/* show an error message? */
clearInterval(id);
return false;
}
if (parent.Cert != null && typeof parent.Cert != 'undefined') {
// clear the interval first
clearInterval(id);
// safely create object
try {
c = new Child(parent.Cert, 1, null);
} catch (e) {
/* handle exception here */
}
} else {
// incrementing the interval counter
itr++;
}
}