【问题标题】:How to detect print preview modal open in child page?如何检测子页面中打开的打印预览模式?
【发布时间】:2015-09-12 12:09:04
【问题描述】:

问题: 从页面 A 我有一个到页面 B 的链接,在页面 B 上它在加载时调用 window.print(),这会打开打印预览模式。我的问题是关于页面 A,有没有一种简单的方法可以知道页面 B 上的打印预览模式当前是否打开? (我只需要这个在 Chrome 上工作)

背景: 我需要完成此操作的原因是,当 Google Chrome 有打开打印预览模式的子页面时,它会阻止父页面的 Ajax 调用。 相关问题:

Chrome browser unable to make a server call when print preview is opened

Google Chrome blocks ajax requests when print preview is opened on child window

https://code.google.com/p/chromium/issues/detail?id=139706

没有简单的方法可以彻底解决这个问题,所以我只想知道打印预览模态是否打开,并警告用户在页面 A 上前进之前关闭页面 B 上的打印模态。

【问题讨论】:

    标签: javascript jquery html ajax google-chrome


    【解决方案1】:

    这看起来是不可能的。 Chrome 不仅会阻止 ajax 执行,还会停止处理页面 A 上的所有脚本。

    我认为您最好的选择是在页面 B 上为用户打印页面提供说明。任何 Javascript 启动的打印都会暂停页面 A 上的 Javascript 执行。

    一种可能的解决方案是在打开页面 B 之前在页面 A 上显示一条消息,以预测这种行为。

    编辑:从下面的评论中提取信息

    经过进一步思考,最好的解决方案是:在页面 B 上,在脚本中调用 window.print(),就在调用 print 之前,将信息发送回页面 A,告知这将发生,所以该页面 A 可能会采取适当的措施。

    【讨论】:

    • 我不认为所有脚本都停止了,我认为它只会阻止 Ajax 调用。例如,我在父页面上有一个按钮,当我单击它时,它会触发 alert()。尽管在子页面上打开了打印模式,但该按钮仍然有效。
    • 我明白你的意思,所以也许不是所有的脚本。但是在我的测试中,除了 ajax 调用之外,任何间隔或超时脚本都会暂停。在脚本中调用 window.print() 的页面 B 上,就在调用 print 之前,将信息发送回页面 A,告知这将发生,以便页面 A 可以采取适当的操作。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2016-07-25
    • 2023-03-04
    • 2023-04-04
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    相关资源
    最近更新 更多