调用
window.open
同步
和
异步
指的是:
-
在点击界面(任意位置)的同时执行 window.open 就是同步方式;
-
点击界面,执行一个ajax请求或者setTimeout后才执行 window.open 就是异步方式。
异步打开窗口,会被浏览器阻止。
1、先以同步方式调用
window.open
打开一个空窗口,得到新窗口的引用,也就是句柄 handle;
2、在 ajax 或 setTimeout 后,通过
handle.location = '新的url'
改变其 url 即可。
var wyWindow = window.open('about:blank', '_blank');
$.post(baseUrl + '/Ajax.ashx', {
userId: id,
success: function (data) {
wyWindow.location = 'http://www.baidu.com';
解决异步加载window.open 被拦截
原因:在chrome的安全机制里面,非用户粗发的window.open方法,是会被拦截的
当发送完ajax之后window.open就会被拦截;原因是用户没有直接发出window.open,而是发出一个ajax请。求,会被浏览器误认为是什么垃圾广告之类的拦截;
解决方法:
1.把打开窗口的操作写在onclick事件中
$('#btn').click(fu...
最近在写一个扫描二维码后判断设备类型进行跳转不同设备类型适配的页面时用到window.open方法,但是总是会被浏览器拦截。网上找了很多方法,包括延迟调用,ajax的异步同步调用,都不见效。后面尝试出一个可以跳转不被拦截的方法,记录一下。
需求如下:
在一个WEB系统中,主页面index.jsp包含了head.jsp left.jsp document.jsp等等,现在需要在document.jsp 上有一个按钮,点击他的时候就弹出新页面将这个页面 document.jsp预览出来,并增加打印和取消两个按钮。
我刚做这个的时候,先从网上找了一大堆东西,比如
var newwin=window.open(wi
目录一、window.open1. 基本语法
本文主要分两部分。第一部分详细介绍window.open的详细用法,包括它的基本语法、使用说明等。第二部分由window.open引出,我们将介绍当存在多个页面相互关联时,页面之间的通信问题。
一、window.open
1. 基本语法
当我们在ajax异步请求的成功回调函数中使用 window.open("url", "_blank") 时,新开的窗口会被拦截,在谷歌、IE浏览器中会有拦截提示,但在360中提示很弱,基本不能发现,我们不能奢求每一个用户在使用的时候都通过浏览器设置允许拦截来让页面正常打开,所以只能想办法通过代码进行控制。
下面,我总结了我认为相对比较好的两种方法。
方法一:将ajax请求设置为同步请求
当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到一段异步代码内部,马上就出现被拦截的表现了。当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这可能是一个广告,不是一个用户希望看到的页面。解决方案一:function newWin(url, id) { var a = document.createElem...
【错原因】:早上更新一个老的网站,当js运行至这句时报出“拒绝访问Javascript”send_request("GET", "http://192.168.100.5/BanL/hits.php?AD=A1", null, "text", Data_AD );而,send_request中使用了XMLHTTPRequest.open(),仔细观察未发现错误,比较费解,后发现该URL地址与访问地
最近开发中碰到一个问题,有一场景需要在ajax验证通过后在新窗口打开一个url。 一开始通过在异步回调函数中使用window.open()来实现,但是发现这种实现方式会被浏览器拦截,需要用户进行浏览器设置才能打开,但是这显然不 适合在互联网应用中对用户做这个限制。因此就想有没有什么办法来解决?
办法一:失败
首先的一个想法是js打开一个新窗口不行,有可能是浏览器对于js直接打开...
因为要携带参数row,不能直接使用window.open(),可以将onclick点击事件的方法挂载在window上。注意,window.open只能放在同步方法里,不能放在异步方法里,异步调用需要转至新页面。
举个例子:普通B/S模式(同步)AJAX技术(异步)同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕--------------------------------------------------------------------------------------