return window.open("" + urlspec);
运行后下载数据,发现仅下载了urlspec的数据,其他的被浏览器拦截了,需要用户自己手动允许才开始下载。
原因和尝试
检索后了解:某些浏览器(比如Chrome)出于安全和体验的考虑,会禁止直接在JS中使用 window.open(url) 打开新的窗口。但是如果使用 window.open(url,'_self') 改变当前窗口是允许的。
禁止直接打开的原因就是非用户操作产生的新弹出窗口,会被认为这可能是一个广告,所以禁止了这种行为。但是在开发的时候, 有时候又的确存在需要使用的场景。从浏览器客户端来看,可以在浏览器客户端设置, 但是这种方式只能临时或单个机器解决。
网上总结主要的解决方法:1、使用表单提交方式;2、使用标签 <a>或是按钮的onclick 事件;3、延迟打开;4、先打开页面, 再更改地址;5、先弹出窗口,然后
重定向
等等。具体的相关内部实现案例参考:
window.open(url)打开链接被浏览器拦截解决方案 - 走看看 (zoukankan.com)
和
window.open被浏览器拦截的解决方案_XiaoHuBeiPlus的博客-CSDN博客
尝试用这些方法解决:
均不能实现
1、使用标签 <a>或是按钮的onclick 事件(
仍有拦截
)
for (var i = 0; i < len; i++) {
var a = document.createElement('a');
a.setAttribute('href', urllist[i]);
a.setAttribute('style', '');
a.setAttribute('target', '_blank');
document.body.appendChild(a);
a.click();
a.parentNode.removeChild(a);//依旧不行,还会被拦截
return window.open("" + urlspec);
2、使用延时(
没有下载
)
for (var i = 0; i < len; i++) {
setTimeout('window.open("" + urllist[i]);',1000);//该方法不行,直接无下载
return window.open("" + urlspec);
最后检索了解到
多个url文件下载
文章中使用的iframe就可以实现这样的场景:
var count=0;
for (var i = 0; i < len; i++) {
var hiddenIFrameID = 'hiddenDownloader' + count++;
var iframe = document.createElement('iframe');
iframe.id = hiddenIFrameID;
iframe.style.display = 'none';
document.body.appendChild(iframe);
iframe.src = urllist[i];//直接下载,不会弹出新的页面
return window.open("" + urlspec);
这样就解决了以上问题,大家在实际使用中还是需要根据自己项目功能需要采用自己最简单的解决方法。
检索后了解:某些浏览器(比如Chrome)出于安全和体验的考虑,会禁止直接在JS中使用 window.open(url) 打开新的窗口。但是如果使用 window.open(url,'_self') 改变当前窗口是允许的。禁止直接打开的原因就是非用户操作产生的新弹出窗口,会被认为这可能是一个广告,所以禁止了这种行为。但是在开发的时候, 有时候又的确存在需要使用的场景。从浏览器客户端来看,可以在浏览器客户端设置, 但是这种方式只能临时或单个机器解决。...
最近在做项目的时候碰到了使用
window.open
被
浏览器
拦截
的情况,搞得人无比郁闷啊,虽然在自己的环境可以对页面进行放行,但是对用户来说,不能要求用户都来通过
拦截
。何况当出现
拦截
时,很多小白根本不知道发生了啥,不知道在哪里看被
拦截
的页面,简直悲催啊~~。
另外,可以发现,当
window.open
为用户触发事件内部或者加载时,不会被
拦截
,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出现被
拦截
的表现了。
原因分析&深入研究
当
浏览器
检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为
浏览器
认为这不是一个用户希望看到的页面。
比如对
js
中直接执行的,如下代码:
js
code
问题
现象
最近在做项目的时候碰到了使用
window.open
被
浏览器
拦截
的情况,有时候会一直连接,有时候会偶尔
拦截
,
尝试了很多方法,走了很多弯路,总结一下结果分享大家
原因分析&深入研究
1 当
浏览器
检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为
浏览器
认为这不是用户希望看到的页面
2在chrome的安全机制里面,非用户触发的
window.open
方法,是会被
拦截
的。...
今天遇到一个
问题
,就是要用
javascript
中的
window.open
()
打开
一个新的网页,而且新
打开
的网页要在原来网页的基础之上,在查了一些资料之后,找到里一下方法:(其中,
url
为
链接
的地址)
1、如果要
打开
一个新的窗口,就加上参数 _blank,如下所示:
2、如果你想弹出的窗口代替本身的话,将参数换为
url
:为要新
打开
页面的
url
name:为新
打开
窗口的名字,可以通过此名字获取该窗口对象
configuration:为新
打开
窗口的一些配置项,比如是否有菜单栏、滚动条、长高等等信息
新
打开
一个没有菜单栏、标题栏、工具栏,但是有滚动条、状态栏、地址栏...
二 业务场景
说一下我的业务场景:我发送一个文本给后台,后台返回三个
URL
给我,然后我要在页面
打开
三个窗口,然后数据更新我还要在第一次
打开
的三个窗口刷新数据,也就是我只能
打开
三个窗口。
三 上代码
稍微臭屁几句,我这里写了三个路由跳转然后iframe src...
一、
URL
类
url
是用来描述如何在Internet上进行资源定位的字符串,一个完整的
URL
由协议、主机名、端口号、文件名、与引用组成。
例如:http://www.sina.com:80/news/index.html
主机名:www.sina.com
端口号:80
访问
的文件名:news/index.html
构造方法如下: