首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >IFRAME加载完成后的Javascript回调?

IFRAME加载完成后的Javascript回调?
EN

Stack Overflow用户
提问于 2008-10-02 19:21:45
回答 11查看 274.6K关注 0票数 150

当IFRAME加载完成后,我需要执行一个回调。我无法控制IFRAME中的内容,因此无法从那里触发回调。

此iframe是以编程方式创建的,我需要在回调中将其数据作为变量传递,并销毁IFRAME。

有什么想法吗?

编辑:

这是我现在所拥有的:

代码语言:javascript
复制
function xssRequest(url, callback)
{
    var iFrameObj = document.createElement('IFRAME');
    iFrameObj.src = url;            
    document.body.appendChild(iFrameObj);   

    $(iFrameObj).load(function() 
    {
        document.body.removeChild(iFrameObj);
        callback(iFrameObj.innerHTML);
    });
}

这是在iFrame加载之前的回调,所以回调没有返回数据。

EN

回答 11

Stack Overflow用户

发布于 2008-10-16 18:31:39

首先,使用函数名xssRequest,这听起来像是在尝试跨站点请求-如果是这样的话,您将无法读取iframe的内容。

另一方面,如果iframe的URL在您的域上,您可以访问正文,但我发现如果我使用超时来删除iframe,回调就能正常工作:

代码语言:javascript
复制
// possibly excessive use of jQuery - but I've got a live working example in production
$('#myUniqueID').load(function () {
  if (typeof callback == 'function') {
    callback($('body', this.contentWindow.document).html());
  }
  setTimeout(function () {$('#frameId').remove();}, 50);
});
票数 49
EN

Stack Overflow用户

发布于 2013-05-04 00:12:24

我正在使用jQuery,令人惊讶的是,这似乎是加载的,因为我刚刚测试并加载了一个很重的页面,几秒钟后我才收到警告,直到我看到iframe加载:

代码语言:javascript
复制
$('#the_iframe').load(function(){
    alert('loaded!');
});

所以,如果你不想使用jQuery,看看他们的源代码,看看这个函数在iframe DOM元素中的表现是否不同,我会在以后自己研究它,因为我感兴趣并在这里发布。另外,我只测试了最新的chrome。

票数 37
EN

Stack Overflow用户

发布于 2008-12-05 05:33:44

在word文档和pdf等文档被流式传输到iframe的情况下,我不得不这样做,并找到了一个工作得很好的解决方案。关键是处理iframe上的onreadystatechanged事件。

假设你的框架的名字是"myIframe“。首先,在代码启动的某个地方(我在iframe之后的任何地方都是内联的),添加如下代码来注册事件处理程序:

代码语言:javascript
复制
document.getElementById('myIframe').onreadystatechange = MyIframeReadyStateChanged;

我不能在iframe上使用onreadystatechage属性,我记不清为什么了,但这个应用程序必须在IE7和Safari3中工作,所以这可能是一个因素。

下面是一个如何获取完整状态的示例:

代码语言:javascript
复制
function MyIframeReadyStateChanged()
{
    if(document.getElementById('myIframe').readyState == 'complete')
    {
        // Do your complete stuff here.
    }
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/164085

复制
相关文章

相似问题

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