【发布时间】:2010-06-18 07:51:31
【问题描述】:
【问题讨论】:
【问题讨论】:
jQuery 创建一个隐藏的 IFRAME 来提交表单,因为这是以 AJAXy 方式处理文件上传的唯一方法。
问题的根本原因是当一个空的 iframe 被插入到文档中时 Opera 会触发 onload。 jQuery 脚本没有预料到这个初始的 onload 事件,认为提交表单已经完成,并得出没有成功的结论。它在 http 上不会那么容易发生的原因可能与 Opera 必须加密文件上传有效负载时的时间不同有关。
如果插入 IFRAME 的同一脚本也启动了将文档加载到 IFRAME 中,则其他浏览器将等到加载文档完成加载并仅触发一个加载事件。 (或者类似的东西 - 在这种特定情况下,启动文档加载的脚本是从超时运行的,所以它甚至不是同一个脚本)。
我建议的解决方法是增强针对此问题已经存在的解决方法尝试:
if (!isXml && (doc.body == null || doc.body.innerHTML == '' ))
并在 if 语句中检查 IFRAME 中文档的 URL 是否仍然是初始 javascript:false :
if (!isXml && (doc.body == null || doc.body.innerHTML == '' || doc.URL=='javascript:false' ))
这应该足以确保 jQuery 等待新文档完成加载。
【讨论】:
迁移到 jQuery 1.5 和最后一个 jQuery 表单插件 (2.63) 后,我的问题似乎得到了解决
【讨论】: