setTimeout()导致减速并且没有正确退出

时间:2011-06-09 18:17:15

标签: javascript iframe

澄清:父框架是第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>

1 个答案:

答案 0 :(得分:2)

不要将字符串传递给setTimeout/Interval。相反,将它传递给函数引用!

var id = setInterval(function () {
    Create();
}, 1000);

根据您在此处提供的代码,parentwindow。这是你想要的吗?这里似乎缺少一些相关的代码......

至于减速,或许功能间隔太短,或者永远不会满足? 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++;
        }
    }