Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript或jQuery中检测iframe(不是同一个域,动态添加)的负载?_Javascript_Jquery_Dom_Iframe - Fatal编程技术网

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

在javascript或jQuery中检测iframe(不是同一个域,动态添加)的负载?,javascript,jquery,dom,iframe,Javascript,Jquery,Dom,Iframe,有没有办法检测何时在javascript/jQuery中加载iframe?在下列情况下: 我控制不了这个框架。它是由另一个javascript插件添加的 它指向另一个域(所以我想我不能使用同一个域的解决方案) 我不知道iframe是什么时候加载的。我可以设置一个时间间隔,每次检查是否有iframe,并尝试调用他的加载事件(因此iframe被动态添加到DOM中) 我已经在其他问题中读到了这一点,但它们要么不完整,要么不假设这三个条件 提前谢谢 对@Jaromanda X回答的补充: 我需要在o

有没有办法检测何时在javascript/jQuery中加载iframe?在下列情况下:

  • 我控制不了这个框架。它是由另一个javascript插件添加的
  • 它指向另一个域(所以我想我不能使用同一个域的解决方案)
  • 我不知道iframe是什么时候加载的。我可以设置一个时间间隔,每次检查是否有iframe,并尝试调用他的加载事件(因此iframe被动态添加到DOM中)
我已经在其他问题中读到了这一点,但它们要么不完整,要么不假设这三个条件

提前谢谢

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

使用变异观察者来检测何时已将iframe添加到DOM中,然后您只需添加一个
加载
事件侦听器来检测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 });

使用变异观察者来检测何时将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 });

可能至少有助于检测何时创建iframe元素-然后可以像往常一样向iframe添加加载事件侦听器。。。可能至少有助于检测何时创建iframe元素-然后您可以像往常一样向iframe添加加载事件侦听器…谢谢,这非常有效!为了记录在案,我需要在
observer.observe(document.body,{childList:true})中为这个答案添加一个选项实际创建:
observer.observe(document.body,{childList:true,subtree:true})。子树选项也适用于目标的所有后代(本例为document.body)。你说得对-我使用的MutationObserver代码中有这个选项(不适用于iframe,也不适用于其他内容),我不确定我是如何错误地复制它的!我会把它添加到回答中谢谢,这很有效!为了记录在案,我需要在
observer.observe(document.body,{childList:true})中为这个答案添加一个选项实际创建:
observer.observe(document.body,{childList:true,subtree:true})。子树选项也适用于目标的所有后代(本例为document.body)。你说得对-我使用的MutationObserver代码中有这个选项(不适用于iframe,也不适用于其他内容),我不确定我是如何错误地复制它的!我将把它添加到答案中