0
var timer;

function check_element_load(){
    timer = window.setInterval(function(){
        console.log("still working"); // keeps running forever
        if(document.getElementById("comments")){
            console.log("FOUND"); // this actually runs
            document.getElementsByTagName("fb:comments")[0].setAttribute('order_by', 'social');
            window.clearInterval(timer); // < not effective
        }
    }, 50);
}


check_element_load();

我试图在顶部放置一个脚本以继续检查特定元素是否已成功加载到浏览器中,它可以工作(控制台记录了“FOUND”),但是当我编写另一个控制台日志以查看间隔是否仍在运行时。确实如此,它永远不会停止并且clearInterval完全被忽略

有什么我错过的吗?我还尝试使用所有其他解决方案,包括settimeout现在最接近我的解决方案是书面的,我只想clearinterval在条件返回 true 后生效。

有没有类似的东西clearinterval更有效,杀死整个功能或什么?

4

1 回答 1

0

就目前而言,您的代码是逻辑正确的,但是如果

document.getElementsByTagName("fb:comments")[0].setAttribute('order_by', 'social');

抛出错误,(当然)永远不会清除超时。你可以改用SetTimeout.

最有可能的调用getElementsByTagName("fb:comments")返回一个空集,给您一个“未定义的元素上不存在方法 setAttribute”类型错误。

于 2013-04-08T11:40:12.570 回答