添加事件侦听器的iframe(Adding an event listener to an ifra

2019-08-04 07:22发布

是否有可能一个事件侦听器添加到一个iframe? 我试过这个代码,但它似乎没有工作时:

document.getElementsByTagName('iframe')[0].contentWindow.window.document.body.addEventListener('afterLayout', function(){
                console.log('works');
            });

我也只是使用ID获取元素,并通过JavaScript框架我使用,像这样将我的听众尝试:

Ext.fly("iframeID").addListener('afterLayout', function(){ alert('test'); });

我可以调用在iframe的功能,所以我不认为安全是一个问题。 有任何想法吗?

Answer 1:

我从来没有试图处理“afterLayout”事件,但更多的浏览器兼容的代码,你将使用( iframe.contentWindow || iframe.contentDocument ),而不是iframe.contentWindow

尝试类似

var iframe = document.getElementsByTagName('iframe')[0],
    iDoc = iframe.contentWindow     // sometimes glamorous naming of variable
        || iframe.contentDocument;  // makes your code working :)
if (iDoc.document) {
    iDoc = iDoc.document;
    iDoc.body.addEventListener('afterLayout', function(){
                        console.log('works');
                });
};

希望能对大家有所帮助。



Answer 2:

如果你正在做的内线严重的iframe的工作,你应该看看ManagedIFrame用户分机:

http://www.extjs.com/forum/showthread.php?t=40961

它具有内置事件和跨框架消息,以及其他许多好处。



Answer 3:

对于失败的原因可能是: -

  1. 将所述iFrame是从一个不同的域作为容器定向的URL,因此码通过跨域脚本阻挡防止。
  2. 代码运行之前的帧的内容被加载


文章来源: Adding an event listener to an iframe