异步完成后新开窗口

作者:zhusun 时间:2010-04-06 12:37:00 

在最近一次项目有一个需求,点击按钮——异步提交——异步响应返回——根据响应返回值新开窗口。这有两个要点:

  1. 异步响应之前不知道要打开窗口的URL;

  2. 在异步响应事件函数中再去打开新窗口——winodw.open(url)时,一些浏览器会拦截新窗口;

第一个约束条件没有突破口,而第二个问题如果仅仅是指让浏览器不拦截JS的新开窗口也比较好处理,这里可以借鉴提交target属性为“_blank”的form表单(对应的blog)或者淘宝怿飞的一篇博客

但怿飞的blog中有一点很重要——用户点击页面。即使我用了下面一段代码来模拟点击事件也是不行的。
var linkDom = document.getElementById('Alink');
if (document.all){
linkDom.fireEvent('onclick');
}else{
var evt = document.createEvent("HTMLEvents");
evt.initEvent("click", true, true);
linkDom.dispatchEvent(evt);
}

我在异步回调函数中已经将URL写入到了Alink元素的href上,上面的代码确实让Alink元素触发了click事件,但不会打开页面,因为浏览器会判断当用户主动点击页面的时候才是用户自己的行为,才去打开新开窗口。

最后由大米提供了一个方法:在用户触发异步事件的时候就打开一个空页面,当异步回调完成以后用新的URL来修改已打开页面location。
window.newWin = window.open();
........
window.newWin.location = newURL;

这个方法也是在有限时间里提出的一种方案,感觉还有一些不足的地方,比如如果异步失败又要去关闭窗口,而浏览器又会询问是否关闭等问题。如果大家有什么好的思路请提点一下。

标签:异步,窗口,浏览器
0
投稿

猜你喜欢

  • mysql 分页优化解析

    2024-01-15 00:33:40
  • Mysql常用基准测试命令总结

    2024-01-22 17:22:05
  • Python Opencv轮廓常用操作代码实例解析

    2023-01-03 08:46:59
  • Python实现双色球号码随机生成

    2023-10-24 23:56:22
  • 网页中空格的烦恼

    2011-04-28 09:26:00
  • Javascript遍历Html Table示例(包括内容和属性值)

    2024-05-22 10:40:53
  • 深入浅析Vue中mixin和extend的区别和使用场景

    2024-05-29 22:42:43
  • Python list运算操作代码实例解析

    2021-11-17 21:44:43
  • TensorFLow 变量命名空间实例

    2021-06-09 04:40:14
  • python的去重以及数据合并的用法说明

    2023-01-12 07:12:57
  • google广告之另类js调用实现代码

    2024-05-11 09:44:21
  • sql中count或sum为条件的查询示例(sql查询count)

    2024-01-16 04:05:02
  • Idea 2019.3 本应该搜索到的插件却搜索不到的解决方法

    2022-03-18 14:42:22
  • 解决python-redis-lock分布式锁的问题

    2023-05-23 18:57:49
  • asp如何实现页面执行时间及搜索时间

    2007-11-12 22:48:00
  • Python如何将给定字符串中的大写英文字母按以下对应规则替换

    2021-04-23 13:47:48
  • OpenCV 表盘指针自动读数的示例代码

    2023-12-29 05:46:38
  • Python深度学习神经网络残差块

    2021-05-27 03:41:24
  • 详解mysql中的concat相关函数

    2024-01-16 06:36:22
  • OpenCV+Imutils实现图像的旋转操作

    2021-07-25 20:39:42
  • asp之家 网络编程 m.aspxhome.com