打开窗口里面的承诺

8 javascript google-chrome javascript-events promise q

我们正在使用promise lib Q,我们遇到以下问题. 从promise调用时,window.open()被浏览器阻止

我们尝试在promise机制开始之前打开窗口,这是有效的,但问题是当打开一个新选项卡(并获取focues)时,所有浏览器资源都引用新选项卡,逻辑仍然在导致性能不佳的第一个标签.

当承诺结束然后捕获此事件并打开新窗口时,还有其他方法可以处理此事件.

更新

它是什么意思"所有浏览器资源都引用了新标签"我们发现了有趣的行为:)我们在用户点击按钮时运行应用程序,在这种情况下我们打开新标签并将焦点更改为新选项卡我们正在等待应用程序启动,这需要大约15秒(直到应用程序实际运行).我们做了以下测试(这很有趣:))当我们点击运行应用程序并打开新选项卡时,我们立即点击返回第一个选项卡(有按钮),这样做的时间减少到4.5秒!!!! 似乎焦点改变了浏览器处理资源的方式.

IM寻找替代解决方案!

jfr*_*d00 16

这是因为两个政策之间存在冲突:

  1. 通过规范,promises .then()异步执行处理程序(在当前事件循环完成之后).

  2. 出于可用性和安全性原因window.open(),只能通过直接用户操作调用(在由用户操作启动的相同事件循环处理期间或之后的一些用户操作之后的短时间内).

由于#2,您将无法从.then()遵循promise规范的promise 的处理程序中打开一个窗口.

通常的解决方法是在用户单击时(在解析承诺之前)同步打开窗口,然后在promise解析时填写已经打开的窗口的内容,或者在错误的情况下关闭窗口.这并不理想,但如果在打开窗口时涉及异步操作,除了获取提升的权限(例如在浏览器插件中)(而不是来自普通的网页脚本)之外,确实没有其他选择.

有关如何通过实施此解决方案来解决特定编码问题的更详细帮助,您必须将实际代码添加到您的问题中,并描述您遇到的特定问题.

寻求特定代码帮助的问题必须包括您需要帮助的代码.