您现在的位置:首页 --> JavaScript --> 异步完成后新开窗口
异步完成后新开窗口
浏览:2964次 出处信息
在最近一次项目有一个需求,点击按钮――异步提交――异步响应返回――根据响应返回值新开窗口。这有两个要点:
- 异步响应之前不知道要打开窗口的URL;
- 在异步响应事件函数中再去打开新窗口――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;
这个方法也是在有限时间里提出的一种方案,感觉还有一些不足的地方,比如如果异步失败又要去关闭窗口,而浏览器又会询问是否关闭等问题。如果大家有什么好的思路请提点一下。
建议继续学习:
- 关于IO的同步,异步,阻塞,非阻塞 (阅读:14552)
- fsockopen 异步处理 (阅读:9089)
- 配合jquery实现异步加载页面元素 (阅读:5388)
- 使用django+celery+RabbitMQ实现异步执行 (阅读:5078)
- 异步编程与响应式框架 (阅读:3957)
- 多核与异步并行 (阅读:3953)
- redis源代码分析 - event library (阅读:3224)
- Google Analytics 异步代码详解 (阅读:3221)
- php的异步http请求类 (阅读:2968)
- Script 元素的异步加载属性 (阅读:2489)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:js对cookie的几个操作函数(仅作备忘)
文章信息
- 作者:zhusun 来源: Koubei UED
- 标签: 异步 窗口
- 发布时间:2010-03-28 15:13:54
建议继续学习
近3天十大热文
- [71] Twitter/微博客的学习摘要
- [65] IOS安全–浅谈关于IOS加固的几种方法
- [65] 如何拿下简短的域名
- [63] Go Reflect 性能
- [63] find命令的一点注意事项
- [62] android 开发入门
- [61] 流程管理与用户研究
- [59] 读书笔记-壹百度:百度十年千倍的29条法则
- [59] 图书馆的世界纪录
- [59] Oracle MTS模式下 进程地址与会话信