zoukankan      html  css  js  c++  java
  • window.open()弹出窗口防止被禁

    window.open(),顾名思义,是指在当前浏览器窗口弹出另一个浏览器窗口。

    因为多种原因,浏览对window.open弹出的窗口做了多方限制。限制不同,肯定会造成各浏览器弹出窗口的差异。

    大部分浏览器会把由javascript弹出的窗口阻止(blocked)掉,得到用户的允许后,打开相应的弹窗。

    现在的问题是,用户点击按钮,做相关的ajax请求,由于响应时间过长,当数据回来时,浏览器已经不认为这是在用户主导操作时间范畴内,而blocked掉弹出窗口。

    解决方法:
    由于window.open方法会返回一个指向新窗口的引用。可以通过这个引用对新开的窗口进行操作。
    所以在用户点击btn时,第一时间弹出窗口,获取弹出窗口的引用。然后进行ajax数据请求,当数据返回时,对请开窗口url地址进行设置 :
    newWindow.location = url;

    1. call window.open just before calling $.ajax and save window reference:
      var newWindow = window.open("loading.html");//这里也许要增加一个loading.html的过渡页面
    2. on callback set location property of the saved window reference:
      newWindow.location = url;

    当然这里存在一定的问题:当ajax请求的数据出错时,新弹出的窗口获取不到最新数据而出错。

    解决方法就是当请求完成且出错时,让newWindow跳转到出错页面。

    又或者loading.html页自己做一个定时器,如果半分钟内没有urlchange,就自行跳错。

    如果这样还不行,只能
    alert('You have a popup blocker enabled. Please allow popups for company.com');

  • 相关阅读:
    JAVA回调
    Json 转换
    memcache 知识点
    Redis基本命令
    LSM树由来、设计思想以及应用到HBase的索引(转)
    ES 集群调整、升级 最佳实践
    Eureka 客户端和服务端间的交互
    logstash 输出到elasticsearch 自动建立index
    Spring 上传文件
    log4j2
  • 原文地址:https://www.cnblogs.com/flowerszhong/p/4477912.html
Copyright © 2011-2022 走看看