2014-01-25 43 views
0

比方说,我创建一个动态的iFrame是这样的:等待一个动态的iFrame加载使用jQuery

$('body').prepend('<iframe id="e" src="/page.html"></iframe>'); 

现在,我想等这个iFrame来完成加载,这样我可以访问它的源。 我可以做到这一点使用:

$('#e').load(function() {} 

但是,如果对需要很长的时间来加载,那么我只是在等待什么“/page.html”的图像或任何东西,因为所有的我需要是源头。

所以我的问题是,是否有可能做这样的事情,而不是:

while not exists ($("#e").contents().find('#someid')) { //wait } 

所以这只是等待,直到“#someid”在我们的iFrame是否存在(意味着至少源代码加载完毕)。

这可能吗?

+0

尝试,看看它只会工作,如果'$(“#E”)。准备(函数(){}'帮助。 –

+0

你好,谢谢你,但它不会与一个动态的iFrame。 –

回答

1

在主窗口中,你可以声明功能(可以说iframeReady):

function iframeReady() { 
    //your code 
} 

并把下面的代码body标记中的iframe结束:

所以,你可以访问父窗口通过parent对象

因此parent.window.iframeReady将在body内容加载,并不会等到所有的图像加载

买者:如果父窗口和iframe具有相同的域

+0

您好,谢谢,但由于内容不同,我无法提前编辑iFrame页面。 –

+0

@ P.Henderson如果您将'parent.window.iframeReady();'添加到'body'标记的最后,它将在可能加载所有内容时执行。为了确保这一点,你可以在'setTimeout'中调用'iframeReady'(在10ms内)。或者您可以在iframe中使用[DOMContentLoaded](https://developer.mozilla.org/en-US/docs/Web/Reference/Events/DOMContentLoaded),但在IE8及更高版本中无效 – Curious