首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >识别iframe上的行为

识别iframe上的行为
EN

Stack Overflow用户
提问于 2013-06-20 21:58:33
回答 2查看 84关注 0票数 1

因此,我有一个iframe,并且我希望能够在单击iframe中的特定按钮时执行类似于alert的操作。但是下面的代码不起作用

代码语言:javascript
运行
复制
$('.class_name').click(function(){
    alert('Clicked');    
});

事实上,当单击iframe (这是与上面相同的代码,但.class_name变成iframe)时,它甚至都不会使用iframe

我查看了来自这个问题的解决方案,但它仍然不起作用!

这是个麻烦事应该能很好地演示这个问题。

因此,我的问题是:为什么会在单击iframe内部的任何内容以及实际的iframe时不识别Jquery?

编辑:

我知道我不能在一个不同的域上与一个iframe通信,所以我的work...but不会在我与iframe在同一个域上托管它的站点上工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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对象。从那里你可以做你需要的事情。例如:

代码语言:javascript
运行
复制
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(),然后等待要查找的元素可用。

票数 2
EN

Stack Overflow用户

发布于 2013-06-20 22:04:34

因为iFrame是一个完全不同的框架--它是出于安全考虑而做的。例如,假设您可以在iFrame中加载银行登录页面,并使用js获取字段值。

特别是在不同的领域,与JS的沟通要困难得多--这应该会让您开始:如何在iframe与父站点之间进行通信?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17224583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档