【问题标题】:_blank got blocked as pop up how can i prevent this?_blank 在弹出窗口中被阻止我该如何防止这种情况?
【发布时间】:2016-03-09 12:47:46
【问题描述】:

我使用时在服务器上创建了一个pdf:

        function GetPdf(document) {


            //Stores the data and creates the html,pdf file
            $http.post('createpdf/', document).success(function(data){

                console.log(data.filename);

                window.open('download2/'+data.filename+".pdf", "_self");


            });

我在谷歌浏览器中弹出一条错误消息。 当我使用为该网站启用弹出窗口选项时,一切正常。有没有办法解决 ?因为这可能会让一些用户感到困惑。

但是当我使用时:

window.open('download2/'+data.filename+".pdf", "_self");

它在没有警告的情况下打开页面,但随后主应用程序被 pdf 取代,这不是我想要的结果。

【问题讨论】:

    标签: javascript html popup


    【解决方案1】:

    浏览器对于何时允许 JavaScript show a popup 有严格的规定,但可以概括为“仅响应用户操作”。

    接收对 HTTP 请求的响应不是用户操作,因此禁止弹出窗口。

    这里的简单解决方案是不使用 JavaScript。 Ajax 的重点是在不离开页面的情况下与服务器进行通信,但无论如何你都会离开页面,所以使用 Ajax 没有任何意义。

    只需使用常规的表单提交即可。

    <form method="post" action="createpdf/" target="_blank">
    

    …然后让服务器端脚本重定向到创建的 PDF 的 URL,而不是将 URL 作为 JSON 返回。

    【讨论】:

      【解决方案2】:

      弹出窗口阻止不是问题,而是保护用户免受popup-hell 的本机浏览器功能。 我会建议在 modal popup 而不是新的浏览器窗口中打开 PDF。

      使用一些 jQuery 代码很容易实现:文档位于 here

      【讨论】:

      • 谢谢,我会调查一下
      【解决方案3】:

      我猜你正在使用外部 JavaScript 库,我在另一个项目中遇到了同样的问题,我使用了 target="_tab" 并且它有效,我在 this question. 上找到了这个 这是 Chrome 在您使用库时处理来自 JavaScript 的弹出调用的方式,我使用 Moment.js 触发了类似的事件并遇到了同样的问题。

      【讨论】:

      • 感谢您的建议,但它仍然会阻止 google chrome 中的 pdf。
      【解决方案4】:

      您始终可以使用替代路由,例如代替 window.open 函数。也许您可以使用 window.location 功能。 Windows.location.replace 会将您重新定位到同一选项卡中。

      <script type="text/javascript">
      <!--loc can be any changed to your window-->
      var loc = "https://google.com/";
      window.
      window.onclick = function() {
         window.open(loc);
      }
      </script>
      

      试试看 :) window.open 被阻止,因为您正在执行 window.open 没有点击功能。出于安全考虑,大多数网络浏览器都会阻止此功能。

      【讨论】:

      • 我更新我的问题,你可以我不能使用 window.onclick
      • Window.open 带有 onclick 功能是最好的选择。你只是想在chrome上打开一个新标签吗?你能说得更具体点吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多