我有一个HTML表单,其中包含常规输入和文件输入。当用户选择要上传的一个或多个文件时,我会立即将表单的target
属性更改为页面上隐藏iframe的name
属性,并更改action
属性我希望将文件上传请求发送到脚本的表单。
从请求的脚本中,我然后将文件上传到服务器,一旦脚本结束,iframe的onload
事件就会触发,之后我会进行各种界面更改。
所有内容都正确上传,但问题是iframe请求似乎会导致将页面请求添加到浏览器历史记录中,从而产生意外后果。我目前发现了以下两个问题:
重点是,似乎iframe请求被添加到浏览器历史记录中会导致各种问题,如果可能的话我想避免这种情况。有没有办法阻止这一切发生?
我还应该注意到,我目前只在最新版本的Chrome中开发,但无论我使用何种解决方案,都必须回到IE8。
答案 0 :(得分:2)
以下是一些有关您的错误的解释
iframe的导航事件(在这种情况下,更改其src属性)也将传播到父窗口。
原因2:iFrame导致可用性问题 iFrame标记因创建可用性烦人而臭名昭著。其中最常见的是:
* it tends to break the "Back" button in the browser being used; * it confuses visually impaired visitors, using screen readers; * it confuses users, suddenly opening the iframe content in a new browser window; * content within the iframe doesn't fit in and looks odd because it can ignore the styles sheets from within the main website; * content within the iframe is missing since the source URL changed; and, * navigation of the site in the iframe stops working.
答案 1 :(得分:1)
我想出了问题和解决方案。问题是,当表单首次加载时,我在表单页面上有一个iframe,并且以某种方式(我不知道为什么)导致了上述问题。
但是,我决定从页面加载中删除iframe,而是在上传文件时通过JS动态创建iframe。上传文件并触发iframe onload
事件后,我会通过JS从DOM中删除iframe,并且不再导致上述问题发生。
老实说,我不太确定为什么要解决这个问题,或者它只是浏览器的一个潜在问题,但同样适用于任何想要使用iframe上传文件的人无需重新加载页面,请确保首次加载时页面上没有iframe,而是仅在需要时动态添加iframe,并在完成后将其删除。