在javascript或jQuery中检测iframe(不是同一个域,动态添加)的加载?

时间:2017-01-26 22:57:44

标签: javascript jquery dom iframe

有没有办法检测jrame / jQuery中加载iframe的时间?满足以下条件:

  • 我无法控制iframe。它是由另一个javascript插件添加的。
  • 它指向另一个域(所以我想我不能使用相同域的解决方案)。
  • 我无法知道iframe加载的那一刻。我只是可以制作一个时间间隔并检查每次是否存在iframe并尝试调用他的加载事件(因此将iframe动态添加到DOM)

我在其他问题中已经读过这个问题,但要么它们不完整,要么不假设这三个条件。

提前致谢。

补充 @Jaromanda X: 我需要在observer.observe(document.body, { childList: true });中添加一个选项来实现此答案:observer.observe(document.body, { childList: true, subtree: true });子树选项也适用于目标的所有后代(本案例document.body)。

1 个答案:

答案 0 :(得分:3)

使用变异观察器来检测何时将iframe添加到DOM中,然后您可以添加load事件侦听器来检测iframe何时已经编号

var observer = new MutationObserver(function (mutations) {
    mutations.forEach(function (mutation) {
        [].filter.call(mutation.addedNodes, function (node) {
            return node.nodeName == 'IFRAME';
        }).forEach(function (node) {
            node.addEventListener('load', function (e) {
                console.log('loaded', node.src);
            });
        });
    });
});
observer.observe(document.body, { childList: true, subtree: true });