【问题标题】:Javascript popup being closed by browserJavascript 弹出窗口被浏览器关闭
【发布时间】:2019-09-17 19:42:59
【问题描述】:

我每年都会要求营业地点完成一项包含 12 个屏幕的调查。当他们在最后一页按下按钮提交调查时,会加载一个页面以完成提交并将营业地点标记为已完成。然后,他们会收到一个 JavaScript 确认框,询问他们是否需要他们提交的信息的 PDF。如果他们表明他们这样做,则会打开一个新的浏览器窗口以提供报告。窗口打开后,浏览器会自动关闭窗口。如何对新窗口请求进行编码,以使浏览器不会关闭窗口。我已经阅读了有关内置弹出窗口阻止程序以及如何禁用它们的信息,但我不想告诉人们禁用内置弹出窗口阻止程序的浏览器,因为有些人不精通技术并且可能会迷路.

我曾尝试在 google 上进行研究,但一无所获。我还在不同的浏览器中测试了该网站,发现 IE 确实提供了报告,而 Firefox 和 chrome 则没有。

   <script>
    YN = confirm("would you like a PDF copy of the information you submitted?")
    if (YN == true) {
        loc = "reportviewer.aspx";
        mywin = window.open(loc); //popup
        window.location = "page12.aspx"; //main window
    }
    else {
        window.location = "page12.aspx";
    }
    </script>

我希望浏览器打开新窗口,加载“reportviewer.aspx”,它调用传递所需参数的报告。相反,浏览器会在窗口打开后关闭它。

【问题讨论】:

  • 对我来说,在父页面更改时销毁弹出窗口听起来像是预期的 QOL/安全实现。快速搜索后我能找到的最接近的:bugs.chromium.org/p/chromium/issues/detail?id=629964
  • 您有什么理由需要一个新窗口来完成您的任务?
  • 同意,我原以为您可以简单地取消在另一个窗口中打开它的概念

标签: javascript


【解决方案1】:

我的猜测是这两个操作有问题的弹出窗口阻止程序。尝试延迟第二个动作,看看窗口是否仍然打开。

if (YN == true) {
  loc = "reportviewer.aspx";
  mywin = window.open(loc); //popup
  window.setTimeout( function () {
    window.location = "page12.aspx"; //main window
  }, 100)
}

【讨论】:

  • 我会尝试添加延迟,看看是否有帮助。我想要 PDF 报告的新窗口的唯一原因是我不希望该人在关闭报告时被从问卷的最后一页带走。这就像当我针对我构建的所有网站上的文档链接的新窗口时一样。希望该人能够关闭文档而不丢失网站。
  • 我尝试不将父窗口返回到 page12.aspx 并且浏览器仍然关闭了弹出窗口。也许我必须将新窗口设置为第 12 页上的链接,在返回页面后出现。这样链接可以在新窗口中打开,而不会被浏览器关闭。
  • 如果用户不做点击链接之类的动作,大多数情况下弹出窗口拦截器会屏蔽窗口。
  • 按下一个按钮来触发一些打开一个新窗口的 JavaScript 怎么样?
【解决方案2】:

我最终做的是摆脱 JavaScript 新窗口调用,因为浏览器关闭了窗口,因为用户没有执行任何操作来获取窗口,并且内置的弹出窗口阻止程序认为窗口内容不安全。我最终在提交调查后出现的第 12 页上创建了一个链接。该链接会在新窗口 (target="_blank") 中触发 reportviewer.aspx。该页面仅使用 .net 代码将浏览器重定向到报告。这样,用户就不会看到传递给报告的参数,而只是获取报告。现在我要研究如何在不提示输入凭据的情况下获取报告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多