_blank在弹出时被阻止,我该如何阻止这种情况?

时间:2015-12-04 14:41:56

标签: javascript html html5 popup

我使用时在服务器上创建了一个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,而这不是我想要的结果。

4 个答案:

答案 0 :(得分:5)

浏览器对于何时允许JavaScript show a popup有严格的规定,但它们可归纳为"仅响应用户操作"。

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

这里的简单解决方案是不使用JavaScript 。 Ajax的目的是在不离开页面的情况下与服务器进行通信,但无论如何都要离开页面,因此使用Ajax确实没有任何意义。

只需使用常规表单提交。

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:-1)

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

答案 3 :(得分:-1)

您始终可以使用替代路线,例如代替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而没有单击功能。出于安全考虑,大多数Web浏览器都会阻止此功能。