【发布时间】:2015-03-13 14:59:45
【问题描述】:
总结: 在 MSIE 11 中,在弹出窗口中,当我用数据填充某个字段时,它是否保持填充状态取决于弹出窗口是否调用了 window.close()。无法与其他浏览器重复。
详情: 我有一个弹出式网页(一个 JSP 页面,如果它对某人很重要),我用它来填写 Web 表单中的现有字段。我添加了一个新字段,它可以正常填写 - 有时。
这是页面的相关部分,已清理以供演示。我的实际页面没有在 Javascript 对象中对电子邮件进行硬编码。
function fillForm() {
var parentWindowOrder = window.opener.salesOrder;
var formData = parentWindowOrder.workingData;
[snip]
var xferEmails = {"emails":["jerome@myserver.com","jerome2@otherserver.com"]};
formData.user_emails = xferEmails.emails;
[snip]
}
window.close(); // HERE IS THE TOGGLE OF MY PROBLEM
在 MSIE 中,如果 window.close() 被禁用(注释掉),那么一切正常。在页面的其他地方可以引用 formData.user_emails 确定。当然,弹出页面仍然存在,必须手动关闭。使用控制台时,查询产生:
>formData.user_emails
["jerome@myserver.com","jerome2@otherserver.com"]
在 MSIE 中,如果 window.close() 在弹出窗口中执行,那么弹出窗口当然会关闭。但是,不会保留存储的值。当在弹出窗口本身中时,在调用 window.close() 之前或之后,该字段被设置并保持设置。但在那之后价值就消失了:
>formData.user_emails
{}
在其他浏览器中我得到了成功条件。
通常您会说“您正在更改代码中其他地方的值”;但是,我已经浏览了我的代码以寻找其他参考。如上所示,这里是在我的场景中设置的唯一位置。
在我的实践中,其他通过类似 JSON 的语法 (xferEmails) 填充变量的工作正常,即使在 MSIE 中也是如此。不是这个特别的。 window.close() 有什么影响呢?
感谢您的回复, 杰罗姆。
【问题讨论】:
-
formData.user_emails只是对xferEmails的引用,当您关闭窗口时,引用的对象就消失了。将值按字面意思设置为formData.user_emails,并在关闭前创建一个到xferEmails的副本。
标签: javascript internet-explorer popup popupwindow