• a链接判断后新开页面被拦截


        之所以会想要写这篇文章,是因为我在最近的项目中使用Js打开新的窗体时被拦截了,因此,让我产生了对浏览器拦截屏蔽新窗体的兴趣,想了解一下为什么会被拦截。
     说到在新的窗口打开新的网页,通常是使用超链接标签的 target ,_blank 实现。当点击了超链接时可以自动的打开新的窗口,但是实际上,需要在执行了某些操作之后通过JS的方式打开。
        而通过JS的方式打开方式比较常用的就是通过window.open 打开新的窗口。这里说明一下,在通常情况下,使用window.open 的方法,是不会被浏览器的屏蔽拦截,只有在恶意弹窗的时候,才会被屏蔽。当用户进行点击触发打开的窗口,是能被浏览器接受的。网络上有很多文章说什么“强制弹窗”,“不会被拦截”,我看了一下,觉得该屏蔽的还是会屏蔽,我想定个时间,让它自动弹窗,还是不行。我分析一下他们的原理,一种是通过超链接,在js中click()触发,另一种是使用js通过form的submit()触发,但是这不能绕开浏览器的屏蔽。因为他们的原理是一样的,不是用户即时触发的。浏览器很容易就能发现和阻止。
     
        人们常说的会被浏览器拦截主要是因为不是由用户发生的操作打开的窗口,包括定时器,ajax异步执行之后等发生的打开窗口的操作。但是比不是所有的浏览器会拦截。经过本人对各大浏览器的测试,非用户触发操作弹窗, 遨游通过, ie通过 ,猎豹不通过 , chrome不通过,360浏览器不通过,火狐不通过。一般正常的操作是不会被屏蔽的,但是恶意弹窗很容易被浏览器识别,如果想不经过用户触发,直接弹窗,只能期待用户是使用IE和遨游浏览器的。
     
    现在总结一下,常见正常弹出窗口失效的原因:
    1.使用window.open,但是定义窗口名,也就是在打开窗口传入name参数,因为window.open只能打开唯一的窗体名为name的窗体。所以有些人会以为被浏览器拦截屏蔽了。
    2.使用异步的ajax,通过ajax向服务器请求,在请求完成后再打开窗口的操作,如果是使用异步的方式,将出现延时,这是浏览器就会以为不是用户触发的操作,这时只要设置同步的方式即可。笔者就是因为这个原因。
     
    可能存在替代方案:
    既然想到弹窗,固然是因为有这方面的需求,目前‘浏览器无法拦截的弹出窗口’是不可能的,能不能找到替代方案。这里提供两个方案:
    1.如果是弹窗广告,一般的做法是在页面document绑定click事件或者的srcoll事件,因为一般打开网页都会点一下或者是滚一下鼠标。所以就很容易的弹窗了(这里以技术出发,笔者代表绝大部分用户不接受这种广告方式)。
    2.如果是弹出通知信息,就更容易,不用这么鬼鬼祟祟了,直接弹出div 的“窗口就行”。
     
    如果有这方面的需求的,看到这篇文章应该会或多或少的有所收获,如果找不到解决方案,请给我留言,希望能够共同探讨。
     

    不被浏览器屏蔽拦截的打开窗口的方法
  • 相关阅读:
    获取Activity中得到焦点的EditText
    SwipeRefreshLayout嵌套ScrollView包裹复杂头布局和RecyclerView
    摄像机识别图片中的手机号
    Glide 加载图片
    反射,元类
    类与实例
    多态
    sys模块理解补充
    python中os模块再回顾
    面向对象之封装
  • 原文地址:https://www.cnblogs.com/diyichen/p/7485851.html
Copyright © 2020-2023  润新知