如何从父文档中捕获iframe内部的刷新?

时间:2011-10-30 00:02:05

标签: javascript jquery html ajax iframe

以下是这种情况: 我们有一个文件上传页面。我们不想在上传完成后重新加载页面,因此我们将表单放在iframe中。 iframe内部的表单发布到自身并在完成后返回json。我们如何捕捉到这种反应?上传完成后,iframe会重新加载,换句话说,我们如何在重新加载iframe时捕获它?

假设这些:

  • 我们不能打印/返回除json对象之外的任何内容(所以没有js代码来调用父文档中的函数。)
  • 我们无法使用ajax,因为您无法使用ajax发布文件
  • 我们无法在iframe中添加javascript代码,因为一旦提交了iframe中的表单,页面就会重新加载,我们会丢失附加的js代码。

有什么想法吗?

UPDATE - 似乎解决方案非常简单(在网上找到它):

<iframe onload="alert(window['upload_iframe'].document.body.innerHTML);"  ...></iframe>

这样,只要重新加载iframe中的页面,它就会触发警报。现在只需区分JSON对象和HTML代码,这非常简单。感谢大家的建议!

2 个答案:

答案 0 :(得分:2)

您是否尝试将“onload”侦听器附加到iframe元素,以查看iframe源何时更改,是否已触发?这可能是一个解决方案。如果它不起作用,那么我认为你没有选择,只能从iframe结果中执行顶级函数。

<强>更新

由于您无法控制来自servlet的响应,因此您可以构建一个与servlet通信的PHP中值并获取它获取的原始json,然后返回执行父窗口javscript函数所需的内容。将json传递给该函数。

这样就可以控制输出。

答案 1 :(得分:0)

您可以通过对iFrame文档的内部文本执行定时检查来检查iFrame的内容是否已更改,无论上次检查时是什么(或者如果文档很大,还是哈希),然后执行一次它已经改变了你可以尝试将内容解析为JSON以检查它是否是预期的响应。

或者,您可以使用AJAX检查上传是否已在服务器端完成,一旦服务器确认已完成上传,您就可以检查iFrame内容。