因此,我有一个iframe,并且我希望能够在单击iframe中的特定按钮时执行类似于alert
的操作。但是下面的代码不起作用
$('.class_name').click(function(){
alert('Clicked');
});
事实上,当单击iframe (这是与上面相同的代码,但.class_name
变成iframe
)时,它甚至都不会使用iframe
。
我查看了来自这个问题的解决方案,但它仍然不起作用!
这是个麻烦事应该能很好地演示这个问题。
因此,我的问题是:为什么会在单击iframe内部的任何内容以及实际的iframe时不识别Jquery?
编辑:
我知道我不能在一个不同的域上与一个iframe通信,所以我的work...but不会在我与iframe在同一个域上托管它的站点上工作。
发布于 2013-06-20 22:03:56
如果您的iframe来自不同的域,如您的小提琴,那么您的JavaScript代码根本无法访问其内容,对不起!
当@Max指出时,您可以使用postMessage()
或URL片段黑客来与另一个域中的iframe通信,如果该iframe中有代码可以处理来自该域的通信。
使用来自tumblr.com的iframe,您可以查看他们的文档,看看它是否谈到在iframe中使用此页面并通过域屏障与其通信。
现在,如果您讨论的是来自与您的页面相同的域的iframe,那么这很容易。在名为myframe
的变量中给定一个myframe
元素,您可以使用myframe.contentWindow
获取其window
对象,使用myframe.contentWindow.document
获取其document
对象。从那里你可以做你需要的事情。例如:
var $myframe = $('#myframe'),
myframe = $myframe[0],
myframewin = myframe.contentWindow,
myframedoc = myframewin.document;
$(myframedoc).find('a').on( 'click', function() {
alert( 'Clicked!' );
});
使用主页中的jQuery副本访问iframe中的内容仍然有一些困难,但是最新版本应该会更好。最糟糕的情况是,您可以为此使用原生DOM事件和方法,但是jQuery确实在这把更新的小提琴中工作。
这个小提琴使用document.write将内容放在iframe中,但是访问框架的jQuery代码将是相同的。当然,要注意的一件事是,当您尝试访问iframe时,它是否已经完全加载。
我认为您可以在包含页面的iframe
元素上侦听iframe
事件,但最糟糕的情况是,您可以使用setTimeout()
或setInterval()
,然后等待要查找的元素可用。
发布于 2013-06-20 22:04:34
因为iFrame是一个完全不同的框架--它是出于安全考虑而做的。例如,假设您可以在iFrame中加载银行登录页面,并使用js获取字段值。
特别是在不同的领域,与JS的沟通要困难得多--这应该会让您开始:如何在iframe与父站点之间进行通信?。
https://stackoverflow.com/questions/17224583
复制相似问题