window.open 在Safari中被拦截
在调移动支付问题的时候遇到过,用window.open打开一个微信支付链接,唤醒移动支付,在IOS下死活唤醒不了,是js代码冲突问题…是click事件IOS下不兼容问题…最后定位到window.open语句,之后改为window.loaction.href,奇迹般的可以唤醒支付,因此,也就很直观的证明了在Safari下用window.open是有问题的
这里是引用原因:大部分现代的浏览器(Chrome/Firefox/IE 10+/Safari)都默认开启了阻止弹出窗口的策略,原因是window.open被广告商滥用,严重影响用户的使用。这个阻止弹出窗口的操作,并不是直接封杀window.open(),而是会根据用户的行为来判断这次window.open()是否属于流氓操作。
如果是由用户触发的动作所引起的 window.open 就不会被浏览器所阻止,比如写在 onclick 这些事件 handler 里的,但如果是代码自己触发的就会被阻止。
那么,我们可以知道,在Safari中无法open新窗口,原因是Safari的安全机制将其阻挡。
并不是所有地方都无法正常使用,在一些ajax或者jquery的getjson等回调代码中只要调用window.open都失效。原因是苹果的安全策略拦截。
解决办法有4种:
(1)用window.location.replace()来替代,【或者改变location.href,可以解决,缺点就是不是新开的窗口】
(2)苹果系统设置,偏好设置->安全性,去掉阻止弹窗的复选框就ok了。 【不建议,会改变用户的设置】
(3)在回到函数中生成一个链接,让用户再次点击下,因为链接是无论如何不会被拦截的。【不建议,多加了一个动作】
(4)在回调代码之前打开一个空窗口,例如 var w=window.open(xxx); 然后在回调函数中设置它的location。【推荐】
例如w.location=yyy; 具体分析和代码参考:
var openWin = function(){var winRef = window.open("url","_blank");$.ajax({type: '',url: '',data: '',......success:function(json){winRef.location = "新的url";}});
};
window.open 在Safari中被拦截相关推荐
- window.open在Safari中不能打开
大部分现代的浏览器(Chrome/Firefox/IE 10+/Safari)都默认开启了阻止弹出窗口的策略,原因是window.open被广告商滥用,严重影响用户的使用.这个阻止弹出窗口的操作,并不 ...
- Swift:在Safari中打开App
打开之前会发生什么呢,先看看这个图: 我这里只是简单模拟了一下.当你输入一个特殊的"url"之后,Safari弹出一个提示,问你是否继续打开这个App.如果你这个时候confirm ...
- Angular2项目中浏览器拦截弹出窗口的解决方法
Angular2项目中浏览器拦截弹出窗口的解决方法 为什么把项目是Angular2的放到了前边? 因为正常也页面网上已经很多解决方案.请自行百度或Google. 现象:当window.open为用户触 ...
- chrome和safari_私人浏览器-如何在Chrome和Safari中使用隐身模式
chrome和safari Private browsing, or "incognito mode" has become a popular way to surf the w ...
- safari支持java_BLOB URL无法在Safari中使用
我使用D3来生成图形并想要将其导出到图像,这在除Safari之外的所有浏览器中都能正常工作 . 该代码生成一个D3 SVG,用于BLOB,用作图像,将其添加到可导出的画布中 . var blob = ...
- safari中判断app是否安装
转载自http://m.blog.csdn.net/blog/wangyx810328/9345817 最近遇到一个需求,需要在safari中判断用户在设备上是否安装了某App,如果安装了则自动启动此 ...
- 数组状态将在iOS 12 Safari中缓存。这是一个错误或功能吗?
本文翻译自:Array state will be cached in iOS 12 Safari. Is it a bug or feature? Update at 2018.10.31 更新于2 ...
- SpringMVC中的拦截器
SpringMVC中的拦截器 拦截器的作用 Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现 ...
- 框架:SpringMVC中Interceptor拦截器的两种实现
Spring中使用Interceptor拦截器 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证, ...
最新文章
- Iphone 安装 ppsspp
- 利用javascript和WebGL绘制地球 【翻译】
- Rider EAP17带来了许多改进但缺乏.NET Core调试功能
- Sybase数据库中找回丢失的sa密码
- win7 32位操作系统 ie8浏览器问题解决办法
- 马哥Linux2016最新高薪运维视频课程
- Android SQLite实现query顺序、倒叙查询
- 同台加载_跨年官宣 | “爷青回”我只服湖南卫视跨年 李易峰陈伟霆马天宇“古剑三侠”同台...
- abb变频器以太网适配器,ABB以太网适配器 Ethernet Adapter现货FENA-01
- 计算机基础知识教案总结,计算机基础学习心得体会范文
- 关于28379D的X-BAR
- matlab柱状图设置条纹,matlab代码画条纹柱状图
- VScode连接Anaconda
- 搜狐CEO张朝阳决定分拆网游业务单独上市
- C语言读写中文时出现乱码的解决
- docker logs使用
- 2021-09-16关于初学C的心路历程~
- Unity Steam_VR VRTK开发插件自带案例详解(一)
- IDEA使用手记——IDEA主菜单被隐藏了!!
- 电脑使用图片转换器打开heic图片方法