【问题标题】:MSIE11, popup window using window.close() erases a variable just setMSIE11,使用 window.close() 的弹出窗口擦除刚刚设置的变量
【发布时间】: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


【解决方案1】:

formData 在打开的弹窗中初始化,在fillForm 函数的范围内。这被分配给父窗口的salesOrder 变量。您是否在父窗口中使用salesOrder 重新初始化formData?如果你没有,那么它应该可以通过salesOrder 访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多