在调移动支付问题的时候遇到过,用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中被拦截相关推荐

  1. window.open在Safari中不能打开

    大部分现代的浏览器(Chrome/Firefox/IE 10+/Safari)都默认开启了阻止弹出窗口的策略,原因是window.open被广告商滥用,严重影响用户的使用.这个阻止弹出窗口的操作,并不 ...

  2. Swift:在Safari中打开App

    打开之前会发生什么呢,先看看这个图: 我这里只是简单模拟了一下.当你输入一个特殊的"url"之后,Safari弹出一个提示,问你是否继续打开这个App.如果你这个时候confirm ...

  3. Angular2项目中浏览器拦截弹出窗口的解决方法

    Angular2项目中浏览器拦截弹出窗口的解决方法 为什么把项目是Angular2的放到了前边? 因为正常也页面网上已经很多解决方案.请自行百度或Google. 现象:当window.open为用户触 ...

  4. chrome和safari_私人浏览器-如何在Chrome和Safari中使用隐身模式

    chrome和safari Private browsing, or "incognito mode" has become a popular way to surf the w ...

  5. safari支持java_BLOB URL无法在Safari中使用

    我使用D3来生成图形并想要将其导出到图像,这在除Safari之外的所有浏览器中都能正常工作 . 该代码生成一个D3 SVG,用于BLOB,用作图像,将其添加到可导出的画布中 . var blob = ...

  6. safari中判断app是否安装

    转载自http://m.blog.csdn.net/blog/wangyx810328/9345817 最近遇到一个需求,需要在safari中判断用户在设备上是否安装了某App,如果安装了则自动启动此 ...

  7. 数组状态将在iOS 12 Safari中缓存。这是一个错误或功能吗?

    本文翻译自:Array state will be cached in iOS 12 Safari. Is it a bug or feature? Update at 2018.10.31 更新于2 ...

  8. SpringMVC中的拦截器

    SpringMVC中的拦截器 拦截器的作用 Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 用户可以自己定义一些拦截器来实现 ...

  9. 框架:SpringMVC中Interceptor拦截器的两种实现

    Spring中使用Interceptor拦截器 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证, ...

最新文章

  1. Iphone 安装 ppsspp
  2. 利用javascript和WebGL绘制地球 【翻译】
  3. Rider EAP17带来了许多改进但缺乏.NET Core调试功能
  4. Sybase数据库中找回丢失的sa密码
  5. win7 32位操作系统 ie8浏览器问题解决办法
  6. 马哥Linux2016最新高薪运维视频课程
  7. Android SQLite实现query顺序、倒叙查询
  8. 同台加载_跨年官宣 | “爷青回”我只服湖南卫视跨年 李易峰陈伟霆马天宇“古剑三侠”同台...
  9. abb变频器以太网适配器,ABB以太网适配器 Ethernet Adapter现货FENA-01
  10. 计算机基础知识教案总结,计算机基础学习心得体会范文
  11. 关于28379D的X-BAR
  12. matlab柱状图设置条纹,matlab代码画条纹柱状图
  13. VScode连接Anaconda
  14. 搜狐CEO张朝阳决定分拆网游业务单独上市
  15. C语言读写中文时出现乱码的解决
  16. docker logs使用
  17. 2021-09-16关于初学C的心路历程~
  18. Unity Steam_VR VRTK开发插件自带案例详解(一)
  19. IDEA使用手记——IDEA主菜单被隐藏了!!
  20. 电脑使用图片转换器打开heic图片方法

热门文章

  1. 【python】获取当前时间(年月日时分秒)
  2. 智能扫地机器人哪个品牌好?最受欢迎排行榜前十名
  3. 一个后端朋友面试一个月的经验总结
  4. 99%的人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系
  5. CDS TABLE FUNCTOIN传参,指定客户端
  6. Xshell光标消失
  7. 前阿里P8甩我一份内部SpringCloud笔记手册,真香
  8. SpringClout 入门笔记
  9. V4L2采集视频数据
  10. C/C++语言100题练习计划 87——火柴棒等式(枚举实现)