_blank 在弹出窗口时被阻止,我该如何防止这种情况发生?

_blank got blocked as pop up how can i prevent this?

我使用时在服务器上创建了一个 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");


            });

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

但是当我使用:

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

打开页面时没有警告,但主应用程序被 pdf 替换,这不是我想要的结果。

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

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

中打开 PDF

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

您始终可以使用替代路线,例如代替 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 没有点击功能。出于安全目的,大多数网络浏览器会阻止此功能。

浏览器对于何时允许 JavaScript 到 show a popup 有严格的规定,但可以概括为 "Only in response to a user action".

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

此处的简单解决方案是不使用JavaScript。 Ajax 的目的是在不离开页面的情况下与服务器通信,但无论如何你都会离开页面,所以使用 Ajax.

没有任何意义

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

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

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

返回