问题:
在子窗口上打开打印预览模式时,Google Chrome 会阻止 ajax 请求
细节:
我有一个网页 - ParentPage.html,其中包含指向子页面 - PrintPage.html 的链接
a href="PrintPage.html" target="_blank"
然后在我的 PrintPage.html 上我有 JavaScript 调用window.print()
$(document).ready(function() {
window.print();
}
如果用户在没有关闭 PrintPage.html 上的打印模式的情况下转到 ParentPage.html 并单击某个触发 Ajax 调用的按钮,则它们将被阻止,直到打印模式关闭。
这应该是 Google Chrome 的一个已知问题,其他浏览器(IE、Firefox)也有类似的问题,但它们不会成为问题,因为它们只是不允许用户导航到当前打开的打印页面之外的其他选项卡。
我在这里找到了相关问题,但没有解决方案:
打开打印预览时,Chrome 浏览器无法调用服务器 https://stackoverflow.com/questions/22715916/chrome-browser-unable-to-make-a-server-call-when-print-preview-is-opened
在子窗口中打开打印预览时,Google Chrome 会阻止 ajax 请求 https://stackoverflow.com/questions/14462163/google-chrome-blocks-ajax-requests-when-print-preview-is-opened-on-child-window
最好让父窗口的Ajax不被阻塞。我觉得这可能是因为并非所有选项卡的 Ajax 调用都被阻止,只有这个父窗口被阻止。因此,如果有一种方法可以使子页面 - PrintPage.html 不是 ParentPage.html 的子页面,那就可以了。
一个不太理想的方法是当我检测到用户单击 ParentPage.html 时关闭 PrintPage.html 上的打印模式。然后当 PrintPage.html 聚焦时重新打开打印模式。重新打开模式部分很简单,但我不知道如何从不同的选项卡关闭打印模式。
如果以上两种方法不起作用,我想当打开打印模式并且用户尝试单击 ParentPage.html 上的 ajax 调用按钮时,我必须显示警告。检测打印模式是否从 ParentPage.html 打开可能也不容易。
任何帮助,将不胜感激!