大家都知道,浏览器为了处理垃圾广告,对于在回调函数中引起来的新开窗口,都会被识别成垃圾广告,从而禁止掉,那么我们要做的就是骗过浏览器这一机制,接下来就介绍几个方法:
第一种就是网上很多做法的在回调函数执行前,去window.open打开一个空白页,这里就不赘述这种方法了,但是这个方法存在一个问题,就是在53版的chrome里跳转会失败,(血泪教训,项目线上问题~~~)
是的,这个不是后端的问题,(虽然一开始我也觉得是服务端的锅,但是我在手动设置允许浏览器关闭防垃圾后发现,53版是可以的,嗯,打脸服务端失败),然后我就开始想办法,最后算是有一种方法解决:
首先需要我们在用户点击的时候去新开一个页面,是的,新开一个页面,但不是window.open,是你在你项目里新开一个空白页,然后在回调里把后端返回的html代码,放进本地存储,是的本地存储,然后再新开页面里加监听storage,如下:
这样就可以解决问题了,绕过了浏览器的防垃圾广告机制,用户行为触发的新开窗口,也解决了个别浏览器在跳转支付宝页面的问题,虽然到现在我也没弄明白,53版本chrome到底是为什么会出现那个签名问题,有明白的大佬可以评论下告诉我。